1.查看源码:
/Video_Codec_SDK_8.0.14/Samples/common/src/dynlink_nvcuvid.cpp
其中的LOAD_LIBRARY函数的源码如下:
1 #elif defined(__unix__) || defined(__APPLE__) || defined(__MACOSX) 2 3 #include <dlfcn.h> 4 5 static char __DriverLibName[] = "libnvcuvid.so"; 6 7 typedef void *DLLDRIVER; 8 9 static CUresult LOAD_LIBRARY(DLLDRIVER *pInstance) 10 { 11 *pInstance = dlopen(__DriverLibName, RTLD_NOW); 12 13 if (*pInstance == NULL) 14 { 15 printf("dlopen "%s" failed! ", __DriverLibName); 16 return CUDA_ERROR_UNKNOWN; 17 } 18 19 return CUDA_SUCCESS; 20 }
看来是写死了so的名字
2.
cd /usr/local/nvidia/lib64
ls -l libnvcuvid*
lrwxrwxrwx 1 995 991 20 May 9 2018 libnvcuvid.so.1 -> libnvcuvid.so.384.81
-rwxr-xr-x 1 root root 2403472 May 8 2018 libnvcuvid.so.384.81
没有这个名字的so
3. 解决
/usr/local/nvidia/lib64
sudo -s
ln -s libnvcuvid.so.384.81 libnvcuvid.so