MATLAB связывает неправильную папку OpenCV (OS X)
Я использую некоторый код MATLAB (OpenTLD), который вызывает OpenCV, однако, похоже, у меня есть дубликаты некоторых из dylibs, что сбивает с толку 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 dylibs, где он считает, что они должны быть.
Это соответствующая часть компиляции:
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]);
Моя текущая мысль - создать мягкую ссылку, но я думаю, что это испортит другие вещи OpenCV, которые я делаю вне MATLAB.
1 ответ
Попробуйте установить DYLD_INSERT_LIBRARIES
переменная окружения перед запуском MATLAB, чтобы заставить ее использовать ваши локальные библиотеки вместо своих собственных. Что-то вроде:
DYLD_INSERT_LIBRARIES=/usr/local/lib/libopencv_2.4.dylib /Applications/MATLAB_R2014a.app/bin/matlab
использование ldd
(или аналог OSX otool
) как внутри, так и снаружи MATLAB, чтобы определить, какие общие библиотеки являются источником конфликта. Сравните вывод этих двух:
% in MATLAB command window
>> !ldd ./some_mex_file.mex*
а также
# in system shell
$ ldd ./some_mex_file.mex*