Failed to link to libnvmedia.so/libnvinfer.so (TensorRT libs) when using docker image

Hello,

I have a docker image of Jetson nano base on nvcr.io/nvidia/l4t-ml:r32.7.1-py3 + an installation of TensorRT 8.2.1.9 (Cuda 10.2).
This docker image is executed on my PC (x64) using arm64 qemu virtualization + option --runtime nvidia when I launch the docker image.
When I compile/link my code with TensorRT libraries, I have this error :

/usr/bin/ld: warning: libnvdla_compiler.so, needed by /usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnvmedia.so, needed by /usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorUnlock'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaEglStreamProducerGetTensor'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorEglStreamConsumerCreate'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaSetCurrentLoadable'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaDataUnregister'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaGetNumOfOutputTensors'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorEglStreamProducerPostMetaData'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `nvdla::createWisdom()'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaGetInputTensorDescriptor'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaLoadableCreate'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaEglStreamConsumerReleaseTensor'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `nvdla::destroyWisdom(nvdla::IWisdom*)'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorLock'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorDestroy'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaGetMaxOutstandingTasks'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaLoadLoadable'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaEglStreamProducerPostTensor'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaGetOutputTensorDescriptor'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaDataRegister'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaEglStreamConsumerAcquireTensor'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaGetNumOfInputTensors'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorEglStreamConsumerAcquireMetaData'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDeviceDestroy'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaInit'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorEglStreamProducerCreate'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaAppendLoadable'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorEglStreamProducerDestroy'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaRemoveLoadable'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDeviceCreate'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `nvdla::destroyNetwork(nvdla::INetwork*)'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorGetMetaData'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaSubmit'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaDestroy'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaCreate'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorCreate'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaGetNumEngines'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorEglStreamConsumerDestroy'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `nvdla::createNetwork()'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaTensorGetStatus'
/usr/lib/gcc/aarch64-linux-gnu/8/../../../aarch64-linux-gnu/libnvinfer.so: undefined reference to `NvMediaDlaLoadableDestroy'
collect2: error: ld returned 1 exit status

Here the result of ldd on libnvinfer.so

root@7d277e11be1f:/# ldd /usr/lib/aarch64-linux-gnu/libnvinfer.so
	librt.so.1 => /lib/aarch64-linux-gnu/librt.so.1 (0x000000400b7b7000)
	libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x000000400b7ce000)
	libnvdla_compiler.so => not found
	libEGL.so.1 => /usr/lib/aarch64-linux-gnu/libEGL.so.1 (0x000000400b7e3000)
	libnvmedia.so => not found
	libstdc++.so.6 => /usr/lib/aarch64-linux-gnu/libstdc++.so.6 (0x000000400b804000)
	libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x000000400b99a000)
	libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x000000400ba53000)
	libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x000000400ba77000)
	/lib/ld-linux-aarch64.so.1 (0x0000004000000000)
	libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x000000400bbd0000)
	libGLdispatch.so.0 => /usr/lib/aarch64-linux-gnu/libGLdispatch.so.0 (0x000000400bbfc000)

The reason if that the file libnvmedia.so is empty.
I see on other forum post that it could be due to the fact that this library is link to the host.

Could you help me to solve that problem?
I do not see that I have to change to my docker image to be able to compile for TensorRT (not that I cannot execute that docker image directly on the Jetson Nano device (version 32.7.1) because there is not enough free space on the SD card.

Hi,

The library is integrated into BSP.
For JetPack 4, the container will map some libraries from the Jetson which might cause this issue.

You can find the mapped libraries in the /etc/nvidia-container-runtime/host-files-for-container.d/ folder.
Then you can copy it from Nano to see if it can work.

Thanks.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.