I’ve built a Docker container using this Dockerfile from the ros2_jetson repo:
I then follow steps here (to run an example) inside the container:
- cd /workspace/ros2_ws/src/ros2_deepstream/
- colcon build
- source /opt/ros/eloquent/setup.bash
- . install/setup.bash
- ros2 run single_stream_pkg single_stream --ros-args -p input_source:=“/dev/video0”
Steps 1-4 run fine, but running step #5 I receive this error:
** (process:139): WARNING **: 18:44:29.567: Failed to load shared library ‘libgstreamer-1.0.so.0’ referenced by the typelib: /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29’ not found (required by /usr/lib/aarch64-linux-gnu/libgstreamer-1.0.so.0)
Traceback (most recent call last):
File “/workspace/ros2_ws/src/ros2_deepstream/install/single_stream_pkg/lib/single_stream_pkg/single_stream”, line 11, in
load_entry_point(‘single-stream-pkg==0.0.0’, ‘console_scripts’, ‘single_stream’)()
File “/usr/lib/python3/dist-packages/pkg_resources/init.py”, line 480, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File “/usr/lib/python3/dist-packages/pkg_resources/init.py”, line 2693, in load_entry_point
return ep.load()
File “/usr/lib/python3/dist-packages/pkg_resources/init.py”, line 2324, in load
return self.resolve()
File “/usr/lib/python3/dist-packages/pkg_resources/init.py”, line 2330, in resolve
module = import(self.module_name, fromlist=[‘name’], level=0)
File “/workspace/ros2_ws/src/ros2_deepstream/install/single_stream_pkg/lib/python3.6/site-packages/single_stream_pkg/single_stream.py”, line 24, in
from single_stream_pkg.single_stream_class import InferencePublisher
File “/workspace/ros2_ws/src/ros2_deepstream/install/single_stream_pkg/lib/python3.6/site-packages/single_stream_pkg/single_stream_class.py”, line 39, in
from gi.repository import GObject, Gst
File “”, line 971, in _find_and_load
File “”, line 955, in _find_and_load_unlocked
File “”, line 656, in _load_unlocked
File “”, line 626, in _load_backward_compatible
File “/usr/lib/python3/dist-packages/gi/importer.py”, line 146, in load_module
dynamic_module = load_overrides(introspection_module)
File “/usr/lib/python3/dist-packages/gi/overrides/init.py”, line 125, in load_overrides
override_mod = importlib.import_module(override_package_name)
File “/usr/lib/python3.6/importlib/init.py”, line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File “/usr/lib/python3/dist-packages/gi/overrides/Gst.py”, line 58, in
class Bin(Gst.Bin):
File “/usr/lib/python3/dist-packages/gi/module.py”, line 181, in getattr
interfaces = tuple(interface for interface in get_interfaces_for_object(info)
File “/usr/lib/python3/dist-packages/gi/module.py”, line 105, in get_interfaces_for_object
interfaces.append(getattr(module, name))
File “/usr/lib/python3/dist-packages/gi/overrides/init.py”, line 39, in getattr
return getattr(self.introspection_module, name)
File “/usr/lib/python3/dist-packages/gi/module.py”, line 220, in getattr
wrapper = metaclass(name, bases, dict)
File “/usr/lib/python3/dist-packages/gi/types.py”, line 234, in init
register_interface_info(cls.info.get_g_type())
TypeError: must be an interface
This shared object file in question (libgstreamer-1.0.so.0) is located here (inside the container);
root@ubuntu:/# find . -name libgstreamer-1.0.so.0
./usr/lib/aarch64-linux-gnu/libgstreamer-1.0.so.0
./usr/lib/aarch64-linux-gnu/tegra/libgstreamer-1.0.so.0
So I tried:
- export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/libgstreamer-1.0.so.0:$LD_LIBRARY_PATH
- (receive same error as above)
- export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/tegra/libgstreamer-1.0.so.0:$LD_LIBRARY_PATH
- (receive same error as above)
I’m not sure where to go from here. It seems the container is not built correctly to run code from the ros2_deepstream repo, even though that seems to be the intended purpose of these containers?