如何直接链接自定义路径中的共享库而不指定RPATH?

时间:2017-08-20 06:19:05

标签: c++ cmake shared-libraries dynamic-linking rpath

我在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中以便搞砸了?

1 个答案:

答案 0 :(得分:0)

好吧,首先看看你的cmake文件会很好,但是唉...

你可以尝试使用它,< ...>是MATLAB安装的基本目录,可能是/ usr / local /或/ opt。

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