簡體   English   中英

MATLAB + Mex + OpenCV:正確鏈接和編譯,但在運行時找不到庫

[英]MATLAB + Mex + OpenCV: Links and compiles correctly but can't find library at run time

我有一個使用OpenCVmex函數,我正在嘗試使用它。 編譯似乎可以正常工作,但是當我嘗試在MATLAB調用該函數時,出現此錯誤:

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查看該庫的依賴ldd mexfunction.mexa64 這是相關的行:

libopencv_legacy.so.2.4 => /nwdata/username/lib/libopencv_legacy.so.2.4 (0x00002ad6a2123000)

好的,這似乎還好。 該文件肯定存在:

[username@machine:/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


[username@machine:/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 machine@redacted 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訪問權限。

幾天前,我遇到了類似的問題。 僅當您在群集上遠程使用matlab時,才會發生此問題。 在Matlab中編輯LD_LIBRARY_FILE是沒有用的,我也不知道為什么。 我通過在.bashrc(或.bash_profile)中定義LD_LIBRARY_PATH解決了該問題。

我遇到了一個非常相似的問題,並通過在Matlab二進制文件目錄中添加了一個缺少的庫的軟鏈接來解決此問題,在本例中,所有其他庫都位於該目錄中:

sudo ln -s /users/marc/lib/libName.so /opt/matlab/MATLAB_R2014b_Linux_x86-64/bin/glnxa64/libName.so

解決了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM