2014-10-24 4 views
-1

Я запускаю некоторый код MATLAB (OpenTLD), который вызывает OpenCV, однако, похоже, у меня есть дубликаты некоторых из dylib, которые запутывают MATLAB.MATLAB связывает неправильную папку OpenCV (OS X)

__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 

У меня определенно есть липиквенские дилибы, где он думает, что они должны быть.

Это соответствующая часть компиляции:

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* 
Смежные вопросы