0

基本上,这个问题与这篇文章相同,但到目前为止尚未解决。这是我的 CMake 脚本:

FIND_PACKAGE(OpenCV REQUIRED)
FIND_PACKAGE(Matlab REQUIRED)

SET(Matlab_DEP_LIBS ${Matlab_LIBRARIES} libmx.so libmat.so)
SET(OpenCV_DEP_LIBS opencv_core opencv_imgproc opencv_imgcodecs)

ADD_EXECUTABLE(myApp ${mySources})
TARGET_LINK_LIBRARIES(myAPP ${Matlab_DEP_LIBS}                        
${OpenCV_DEP_LIBS})

编译器报告链接错误:

/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFWriteEncodedStrip@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFIsTiled@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFOpen@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFReadEncodedStrip@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFSetField@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFWriteScanline@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFGetField@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFScanlineSize@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFNumberOfStrips@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFSetWarningHandler@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFSetErrorHandler@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFReadEncodedTile@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFReadRGBATile@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFClose@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFRGBAImageOK@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFClientOpen@LIBTIFF_4.0'
/usr/local/lib/libopencv_imgcodecs.so.3.3.1: undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'

问题是也存在一个libtiff.so.5in /usr/local/MATLAB/R2015b/bin/glnxa64。此时链接器似乎搞砸了。因此,与其libtiff.so.5在 Matlab 的二进制目录中重命名,什么是正确的解决方法?

4

1 回答 1

0

我注意到 MATLAB R2016a(不是更高版本)和使用 LibTIFF 的 MEX 文件(虽然不是通过 OpenCV)也有同样的事情。我认为他们在那个版本的 MATLAB 中对 LibTIFF 库做了一些奇怪的事情。该 MATLAB 或更新的 MATLAB 具有更新版本的 LibTIFF,可以满足我的 MEX 文件的所有要求。

即使您在 MEX 文件中正确设置了正确的 RPATH,MATLAB 也已经加载了 LibTIFF 共享库,因此当它加载您的 MEX 文件时,它将链接到已经在内存中的 LibTIFF。

与往常一样,解决方案是使用静态链接。重建 OpenCV 以静态链接 LibTIFF。如果您使用静态链接,您的代码将始终使用它们链接的 LibTIFF 函数,而不是碰巧在内存中的任何共享对象中的函数。

于 2019-01-11T17:37:40.167 回答