ROSBUG:libopencv_imgcodecs3.so.3.3.1: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0`

ROS安装完后会安装一个opencv,但是自己也安装了一个opencv, 于是可能这两个opencv可能就产生了冲突。ROS默认调用的是自带的opencv。
解决办法:
查找libopencv_imgcodecs3.so.3.3.1依赖的库:

ldd /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1

输出:

linux-vdso.so.1 =>  (0x00007ffd3bb9b000)
libopencv_imgproc3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgproc3.so.3.3 (0x00007f81bcc53000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f81bca36000)
libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f81bc7dd000)
libwebp.so.5 => /usr/lib/x86_64-linux-gnu/libwebp.so.5 (0x00007f81bc581000)
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f81bc35c000)
libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f81bc0e7000)  //看这里
libjasper.so.1 => /usr/lib/x86_64-linux-gnu/libjasper.so.1 (0x00007f81bbe92000)
libopencv_core3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_core3.so.3.3 (0x00007f81baf58000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f81bad3e000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f81ba9bc000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f81ba6b3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f81ba49d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f81ba0d3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f81bfb78000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f81b9eb1000)
libjbig.so.0 => /usr/lib/x86_64-linux-gnu/libjbig.so.0 (0x00007f81b9ca3000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f81b9a9f000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f81b9897000)

然后在CMakelist.txt中手动指定tiff的路径

  target_link_libraries(${PROJECT_NAME}_lib
  	...
    /usr/lib/x86_64-linux-gnu/libtiff.so.5  
  )

你可能感兴趣的:(ROS)