我有一個mex
函數,它使用我試圖使用的OpenCV
。編譯似乎工作,但是當我嘗試和內MATLAB
調用函數我得到這個錯誤:MATLAB + Mex + OpenCV:鏈接和編譯正確,但在運行時無法找到庫
Invalid MEX-file '/path/to/project/mexfunction.mexa64': libopencv_legacy.so.2.4: cannot open shared object file: No such file or directory
我OpenCV 2.4.5
安裝位於/nwdata/username/
(我整理自己從使用OpenCV的從無到有,從他們的文檔推薦設置) 。我使用這個函數與mex編譯:
function cvmex(mexfile)
OCV_INC_DIR='/nwdata/username/include/opencv';·
OCV2_INC_DIR='/nwdata/username/include';·
OCV_LIB_DIR ='/nwdata/username/lib';·
mex(mexfile,'-g','-v',['-I',OCV2_INC_DIR],['-I',OCV_INC_DIR],['-L',OCV_LIB_DIR],'DUSE_DOUBLE',...
'-lopencv_legacy','-lopencv_imgproc','-lopencv_core','-lopencv_contrib','-lopencv_ml',...
'-lopencv_objdetect','-lopencv_calib3d','-lopencv_flann','-lopencv_features2d',...
'-lopencv_video','-lopencv_gpu');
end
當我編譯時,我沒有得到任何錯誤。然後我查看了庫的依賴關係是什麼ldd mexfunction.mexa64
。下面是相關線路:
libopencv_legacy.so.2.4 => /nwdata/username/lib/libopencv_legacy.so.2.4 (0x00002ad6a2123000)
好了,這似乎好。這個文件肯定存在:
[[email protected]:/nwdata/username/lib]
$ ls -l libopencv_legacy*
lrwxrwxrwx 1 username REDACTED 25 Jul 15 15:07 libopencv_legacy.so -> libopencv_legacy.so.2.4.5
lrwxrwxrwx 1 username REDACTED 25 Jul 15 15:07 libopencv_legacy.so.2.4 -> libopencv_legacy.so.2.4.5
-rwxr-xr-x 1 username REDACTED 1303944 Jun 17 15:37 libopencv_legacy.so.2.4.5
[[email protected]:/nwdata/username/lib]
$ file libopencv_legacy.so*
libopencv_legacy.so: symbolic link to `libopencv_legacy.so.2.4.5'
libopencv_legacy.so.2.4: symbolic link to `libopencv_legacy.so.2.4.5'
libopencv_legacy.so.2.4.5: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
在Linux上運行:
Linux [email protected] 2.6.43.8-1.fc15.x86_64 #1 SMP Mon Jun 4 20:33:44 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
MATLAB R2011b, and g++ 4.6.3.
這似乎很奇怪。有任何想法嗎?這臺機器是集羣的一部分,所以我沒有root權限或任何東西。
檢查路徑和LD_LIBRARY_PATH環境 – Shai
該目錄不在我的shell或MATLAB路徑中。這裏是LD_LIBRARY_PATH: '>> GETENV( 'LD_LIBRARY_PATH')'' ANS = 在/ usr /本地/ matlab2011b/SYS/OS/glnxa64:在/ usr /本地/ matlab2011b /斌/ glnxa64:在/ usr /本地/ matlab2011b /的extern/lib中/ glnxa64:在/ usr /本地/ matlab2011b /運行/ glnxa64:在/ usr /本地/ matlab2011b/SYS/JAVA/JRE/glnxa64/JRE/lib目錄/ AMD64/native_threads:在/ usr /本地/ matlab2011b/sys/java/jre/glnxa64/jre/lib/amd64/server:/ usr/local/matlab2011b/sys/java/jre/glnxa64/jre/lib/amd64' – NOP
您可以將它添加到ld lib路徑嗎? – Shai