我正在使用nvcodec sdk(https://developer.nvidia.com/nvidia-video-codec-sdk),并在项目中使用其linux静态库。
我用
在gcc中添加了compile选项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
我发现它已链接到同名的nvidia驱动程序。
libnvcuvid.so.1 => /usr/lib/nvidia-384/libnvcuvid.so.1
由于NvCodec是静态库,因此我无法修改LD_LIBRARY_PATH来修改搜索顺序。
即使我不添加链接选项(例如-lnvcuvid),我也不知道为什么将其链接到nvidia驱动程序库
有主意吗?
谢谢
答案 0 :(得分:1)
如罗伯特·克罗维拉(Robert Crovella)所说,
这是过时的驱动程序的问题。 cuda编解码器sdk中的库实际上是一个存根,它指向cuda驱动程序共享库。
在nvidia-384驱动程序库中没有像cuvidGetDecodeStatus这样的符号。
将nvidia-384更新为nvidia-396后,问题得以解决。