【发布时间】:2019-06-06 13:04:31
【问题描述】:
基本上,这个问题与this post 相同,但目前尚未解决。这是我的 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'
问题是/usr/local/MATLAB/R2015b/bin/glnxa64 中还存在一个libtiff.so.5。此时链接器似乎搞砸了。因此,与其在 Matlab 的二进制目录中重命名 libtiff.so.5,那么正确的解决方法是什么?
【问题讨论】:
-
如果 matlab 共享库链接到
libtiff.so.4而 opencv 共享库链接到libtiff.so.5,那么除了 rebuild matlab 或 opencv 之外别无选择,所以两者都有将与相同的libtiff库链接。使用ldd /usr/local/lib/libopencv_imgcodecs.so.3.3.1,您可以检查libopencv需要哪些库;可以使用相同的方法检查matlab库。 -
@Tsyvarev 嗨!正如你所说,我运行
ldd ...,发现OpenCV链接libtiff.so.5,但libmat.so、libmx.so和libmex.so根本不需要libtiff.so.5或libtiff.so.4。 -
嗯,那你的库有问题。你确定你过去没有重命名它们吗?我的意思是,手动重命名,因为操作系统包管理器从不做这样的事情(当新版本的库发布时,它只是添加新的
lib*.so.x.y文件而不删除旧文件)。 -
我确保我之前没有重命名,实际上,一旦我在
/usr/local/MATLAB/R2015b/bin/glnxa64中重命名了libtiff.so.5,它就起作用了。
标签: matlab opencv cmake linker