Я нахожусь на Ubuntu 16.04, и я обязан использовать внешнюю библиотеку (MCR). Он помещает все свои общие библиотеки в MATLAB/bin/glnxa64/
папка. Мне нужен только libmx.so, но там есть библиотеки с тем же именем, что и в /usr/lib
но они на самом деле разные (потому что размер файла отличается), например libtiff.so.5
,
Это становится проблемой, потому что, когда я использую find_library
функция в CMake для добавления MATLAB/bin/glnxa64/
в RPATH для связи с libmx.so для моего приложения, поскольку мое приложение также зависит от другой внешней библиотеки (OpenCV), которая была связана с libtiff.so.5
в /usr/lib
когда он был собран, когда я компилирую свое приложение, он показывает ошибку компиляции
/usr/lib/libopencv_imgcodecs.so.3.3.0: неопределенная ссылка на
`TIFFReadDirectory@LIBTIFF_4.0′
Это потому, что мое приложение пытается связаться с libtiff.so.5
в MATLAB/bin/glnxa64/
вместо /usr/lib
потому что RPATH имеет более высокий приоритет, чем каталоги по умолчанию. Каков наилучший способ решить эту проблему?
Я пытался переименовать libtiff.so.5
в MATLAB/bin/glnxa64/
что-то вроде libtiff_old.so.5
, Это решает это, но очень уродливо.
Есть ли в любом случае я могу чередовать приоритет поиска, чтобы RPATH шел после каталогов по умолчанию? Или я могу что-то сделать в CMake, чтобы мое приложение могло напрямую ссылаться на libmx.so без необходимости добавлять MATLAB/bin/glnxa64/
в RPATH, чтобы все испортить?
Ну, во-первых, было бы хорошо увидеть ваш файл cmake, но увы ..
Вы можете попробовать использовать это, <…> ваш базовый каталог для установки MATLAB, который может быть / usr / local / или / opt.
find_library (MATLAB_RUNTIME libmx
PATHS <...>/MATLAB/bin/glnxa64/
NO_DEFAULT_PATH )
Других решений пока нет …