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!\n", __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