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.
이 이상한 것 같다. 어떤 아이디어? 이 컴퓨터는 클러스터의 일부이므로 루트 액세스 또는 기타 권한이 없습니다.
경로 및 LD_LIBRARY_PATH 환경을 확인하십시오. – Shai
디렉토리가 내 셸 또는 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
ld lib 경로에 추가 할 수 있습니까? – Shai