一、问题描述
环境:Ubuntu18.04 ROSMelodic Anaconda3
笔者之前在编译find-object功能包的时候,并未出现任何问题。在安装了anaconda3后编译该功能包报错LIBTIFF_4.0未定义的引用。
//usr/lib/libgdal.so.20:对‘TIFFLastDirectory@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFWriteEncodedStrip@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFIsTiled@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSwabArrayOfShort@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFIsByteSwapped@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFFlushData@LIBTIFF_4.0’未定义的引用
/home/wheeltec-client/anaconda3/lib/libQt5Core.so.5.15.2:对‘std::pmr::monotonic_buffer_resource::~monotonic_buffer_resource()@GLIBCXX_3.4.28’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFFreeDirectory@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFScanlineSize@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFWriteEncodedTile@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFWriteBufferSetup@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFTileSize@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFRGBAImageOK@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFClose@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFWriteRawStrip@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSetTagExtender@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFGetFieldDefaulted@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSwabArrayOfLong@LIBTIFF_4.0’未定义的引用
/home/wheeltec-client/anaconda3/lib/libQt5Core.so.5.15.2:对‘vtable for std::pmr::monotonic_buffer_resource@GLIBCXX_3.4.28’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFTileSize64@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFReadRGBATileExt@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFStripSize@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFMergeFieldInfo@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFSetWarningHandler@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFGetConfiguredCODECs@LIBTIFF_4.0’未定义的引用
//usr/lib/x86_64-linux-gnu/libgeotiff.so.2:对‘_TIFFmalloc@LIBTIFF_4.0’未定义的引用
//usr/lib/x86_64-linux-gnu/libgeotiff.so.2:对‘_TIFFmemcpy@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFClientdata@LIBTIFF_4.0’未定义的引用
//usr/lib/x86_64-linux-gnu/libgeotiff.so.2:对‘_TIFFrealloc@LIBTIFF_4.0’未定义的引用
//usr/lib/x86_64-linux-gnu/libgeotiff.so.2:对‘_TIFFmemset@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFReadRGBAStripExt@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFWriteCheck@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSetWriteOffset@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFDefaultStripSize@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFScanlineSize64@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFIsBigEndian@LIBTIFF_4.0’未定义的引用
/home/wheeltec-client/anaconda3/lib/libQt5Core.so.5.15.2:对‘std::__exception_ptr::exception_ptr::_M_release()@CXXABI_1.3.13’未定义的引用
//usr/lib/x86_64-linux-gnu/libpoppler.so.73:对‘TIFFFdOpen@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFWriteScanline@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘_TIFFfree@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSwabLong@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFGetField@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSwabShort@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFNumberOfStrips@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFWriteDirectory@LIBTIFF_4.0’未定义的引用
//usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8:对‘uuid_generate@UUID_1.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFReadEncodedTile@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFReadRGBATile@LIBTIFF_4.0’未定义的引用
//usr/lib/x86_64-linux-gnu/libgeotiff.so.2:对‘TIFFClientOpen@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFFlush@LIBTIFF_4.0’未定义的引用
//usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8:对‘uuid_parse@UUID_1.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFErrorExt@LIBTIFF_4.0’未定义的引用
/home/wheeltec-client/anaconda3/lib/libQt5Core.so.5.15.2:对‘std::pmr::get_default_resource()@GLIBCXX_3.4.26’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFNumberOfDirectories@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFWriteRawTile@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFStripSize64@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFCreateDirectory@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFOpen@LIBTIFF_4.0’未定义的引用
/home/wheeltec-client/anaconda3/lib/libQt5Gui.so.5.15.2:对‘std::__throw_bad_array_new_length()@GLIBCXX_3.4.29’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSwabArrayOfDouble@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSetSubDirectory@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFUnlinkDirectory@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFReadEncodedStrip@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFSetField@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFCurrentDirOffset@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFIsCODECConfigured@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFUnsetField@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFDataWidth@LIBTIFF_4.0’未定义的引用
/home/wheeltec-client/anaconda3/lib/libQt5Core.so.5.15.2:对‘std::__exception_ptr::exception_ptr::_M_addref()@CXXABI_1.3.13’未定义的引用
//usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8:对‘uuid_unparse@UUID_1.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFRewriteDirectory@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFGetSizeProc@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFSetErrorHandler@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFSetDirectory@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFReadScanline@LIBTIFF_4.0’未定义的引用
//usr/lib/libgdal.so.20:对‘TIFFNumberOfTiles@LIBTIFF_4.0’未定义的引用
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0:对‘TIFFReadRGBAStrip@LIBTIFF_4.0’未定义的引用
collect2: error: ld returned 1 exit status
find-object-melodic-devel/src/CMakeFiles/print_objects_detected.dir/build.make:177: recipe for target '/home/wheeltec-client/Desktop/find_object_3d/devel/lib/find_object_2d/print_objects_detected' failed
make[2]: *** [/home/wheeltec-client/Desktop/find_object_3d/devel/lib/find_object_2d/print_objects_detected] Error 1
CMakeFiles/Makefile2:2516: recipe for target 'find-object-melodic-devel/src/CMakeFiles/print_objects_detected.dir/all' failed
make[1]: *** [find-object-melodic-devel/src/CMakeFiles/print_objects_detected.dir/all] Error 2
二、出现原因
出现原因主要是TIFF的库和conda的TIFF库发生了冲突,编译程序需要的是TIFF-4.0版本,但是系统内的不是这个版本。
三、解决方法
1、下载并安装Tiff-4.0.4(下载链接)
2、解压到任意位置,进入目录
3、./configure
4、make
5、make install
6、conda remove libtiff
重新编译即可。