2013-07-15 1 views
1

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 [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.

이 이상한 것 같다. 어떤 아이디어? 이 컴퓨터는 클러스터의 일부이므로 루트 액세스 또는 기타 권한이 없습니다.

+0

경로 및 LD_LIBRARY_PATH 환경을 확인하십시오. – Shai

+0

디렉토리가 내 셸 또는 MATLAB 경로에 있지 않습니다. 여기 LD_LIBRARY_PATH이다 '>>의 GetEnv ('LD_LIBRARY_PATH ')가' '의 ANS = /usr/지방/matlab2011b/SYS/OS/glnxa64/usr/지방/matlab2011b/빈/glnxa64 :은/usr/local/matlab2011b/extern/lib/glnxa64 :/usr/local/matlab2011b/runtime/glnxa64 :/usr/local/matlab2011b/sys/java/jre/glnxa64/jre/lib/amd64/native_threads :/usr/local/matlab2011b/sys/java/jre/glnxa64/jre/lib/amd64/server :/usr/local/matlab2011b/sys/java/jre/glnxa64/jre/lib/amd64' – NOP

+0

ld lib 경로에 추가 할 수 있습니까? – Shai

답변

1

며칠 전에 비슷한 문제가 발생했습니다. 이 문제는 클러스터에서 원격으로 matlab을 사용할 때만 발생합니다. Matlab에서 LD_LIBRARY_FILE을 편집하는 것은 쓸모가 없으며 왜 그런지 모르겠습니다. .bashrc (또는 .bash_profile)에 LD_LIBRARY_PATH를 정의하여 문제를 해결했습니다.

0
나는 매우 비슷한 문제가 있었다 다른 모든 libs와 나의 경우에 있었다 matlab에 바이너리 디렉토리에서 누락 된 라이브러리에 소프트 링크를 추가하여 해결

:

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

문제를 해결 .