包含静态库,但在运行时仍然 link 到同名动态库

The static library are included, but still link to dynamic library in same name at runtime

我正在使用 nvcodec sdk (https://developer.nvidia.com/nvidia-video-codec-sdk) 并在我的项目中使用它的 linux 静态库。

我在 gcc 中添加了编译选项

gcc myprogram.c  NvCodec/Lib/linux/stubs/x86_64/libnvcuvid.so

但是,当运行程序,

./bin/a.out: symbol lookup error: ./bin/a.out: undefined symbol: cuvidGetDecodeStatus

我发现符号cuvidGetDecodeStatus其实在NvCodec/Lib/linux/stubs/x86_64/libnvcuvid.so.

然后

nm a.out

该符号包含在程序中。

所以我试过了

ldd a.out

我发现它已 link 编辑到具有相同名称的 nvidia 驱动程序。

libnvcuvid.so.1 => /usr/lib/nvidia-384/libnvcuvid.so.1 

我无法修改 LD_LIBRARY_PATH 来修改搜索顺序,因为 NvCodec 是一个静态库。

我不知道为什么即使我没有添加 link 选项(如 -lnvcuvid)linked 到 nvidia 驱动程序库

有想法吗?

谢谢

正如@Robert Crovella 所说,

这是过时驱动程序的问题。 cuda codec sdk中的library其实是一个stub,指向cuda driver shared library。

并且nvidia-384驱动库中没有cuvidGetDecodeStatus这样的符号

将nvidia-384更新为nvidia-396后,问题解决。