Как связать разделяемые библиотеки в произвольном пути напрямую, не указывая RPATH?

Я нахожусь на 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, чтобы все испортить?

0

Решение

Ну, во-первых, было бы хорошо увидеть ваш файл cmake, но увы ..

Вы можете попробовать использовать это, <…> ваш базовый каталог для установки MATLAB, который может быть / usr / local / или / opt.

find_library (MATLAB_RUNTIME libmx
PATHS <...>/MATLAB/bin/glnxa64/
NO_DEFAULT_PATH )
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]