包含静态库,但在运行时仍然 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后,问题解决。
我正在使用 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后,问题解决。