我在Ubuntu 16.04上,我需要使用外部库(MCR)。它将所有共享库放在MATLAB/bin/glnxa64/
文件夹中。我只需要libmx.so,但其中有一些库与/usr/lib
中的库名完全相同,但它们实际上是不同的(因为文件大小不同),例如{{1} }。
这成为一个问题,因为当我使用CMake中的libtiff.so.5
函数将find_library
添加到RPATH中以便为我的应用程序链接到libmx.so时,因为我的应用程序还依赖于另一个外部库(OpenCV)在构建时MATLAB/bin/glnxa64/
中链接到libtiff.so.5
,当我编译应用程序时,它显示编译错误
/usr/lib/libopencv_imgcodecs.so.3.3.0:未定义的引用 `TIFFReadDirectory@LIBTIFF_4.0'
这是因为我的应用程序试图链接到/usr/lib
中的libtiff.so.5
而不是MATLAB/bin/glnxa64/
,因为RPATH的优先级高于默认目录。解决这个问题的最佳方法是什么?
我尝试将/usr/lib
中的libtiff.so.5
重命名为MATLAB/bin/glnxa64/
。这解决了它,但非常难看。
无论如何,我可以替换搜索优先级,以便RPATH在默认目录之后?或者我可以在CMake中做些什么,所以我的应用程序可以直接链接到libmx.so,而不必将libtiff_old.so.5
添加到RPATH中以便搞砸了?
答案 0 :(得分:0)
好吧,首先看看你的cmake文件会很好,但是唉...
你可以尝试使用它,< ...>是MATLAB安装的基本目录,可能是/ usr / local /或/ opt。
find_library (MATLAB_RUNTIME libmx
PATHS <...>/MATLAB/bin/glnxa64/
NO_DEFAULT_PATH )