-1

我正在运行一些调用 OpenCV 的 MATLAB 代码(OpenTLD),但是看起来我有一些 dylib 的重复项,这让 MATLAB 感到困惑。

__ZN2cv13AlgorithmInfo8addParamERNS_9AlgorithmEPKcRbbMS1_FivEMS1_FviERKNSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEE
  Referenced from: /usr/local/lib/libopencv_superres.2.4.dylib
  Expected in:
  /Applications/MATLAB_R2014a.app/bin/maci64/libopencv_core.2.4.dylib
 in /usr/local/lib/libopencv_superres.2.4.dylib

我肯定有它认为应该存在的 libopencv dylib。

这是编译的相关部分:

include = ' -I/usr/local/include/opencv/ -I/usr/local/include/'; 
libpath = '/usr/local/lib/'; 

files = dir([libpath 'libopencv*.dylib']);

lib = [];
for i = 1:length(files),
    lib = [lib ' ' libpath files(i).name];
end

eval(['mex lk.cpp -O' include lib]);

我目前的想法是建立一个软链接,但我认为这会弄乱我在 MATLAB 之外所做的其他 OpenCV 工作。

4

1 回答 1

1

在启动 MATLAB 之前尝试设置DYLD_INSERT_LIBRARIES环境变量以强制它使用您的本地库而不是它自己的库。就像是:

DYLD_INSERT_LIBRARIES=/usr/local/lib/libopencv_2.4.dylib /Applications/MATLAB_R2014a.app/bin/matlab

在 MATLAB 内部和外部使用ldd(或 OSX 等效otool项)来查找哪些共享库是冲突的根源。比较这两个的输出:

% in MATLAB command window
>> !ldd ./some_mex_file.mex*

# in system shell
$ ldd ./some_mex_file.mex*
于 2014-10-25T19:27:14.753 回答