C++ 带有ROS的libtiff4错误

C++ 带有ROS的libtiff4错误,c++,ubuntu,ros,libtiff,C++,Ubuntu,Ros,Libtiff,我正试图在Ubuntu 14.04下从一个朋友那里编译一个带有catkin的ROS包,结果出现以下错误: /usr/bin/ld: warning: libboost_system.so.1.49.0, needed by //usr/local/MATLAB/R2014a/bin/glnxa64/libut.so, may conflict with libboost_system.so.1.54.0 //usr/local/lib/libcvd.so: undefined refere

我正试图在Ubuntu 14.04下从一个朋友那里编译一个带有catkin的ROS包,结果出现以下错误:

/usr/bin/ld: warning: libboost_system.so.1.49.0, needed by   
//usr/local/MATLAB/R2014a/bin/glnxa64/libut.so, may conflict with libboost_system.so.1.54.0
//usr/local/lib/libcvd.so: undefined reference to `TIFFWriteEncodedStrip@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFReadRGBAImageOriented@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFWriteScanline@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFGetField@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFClose@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFClientOpen@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFGetFieldDefaulted@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFStripSize@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFSetField@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libharfbuzz.so.0: undefined reference to `FT_Face_GetCharVariantIndex'
//usr/local/lib/libcvd.so: undefined reference to `TIFFSetErrorHandler@LIBTIFF_4.0'
//usr/local/lib/libcvd.so: undefined reference to `TIFFReadScanline@LIBTIFF_4.0'
//usr/lib/x86_64-linux-gnu/libharfbuzz.so.0: undefined reference to `FT_Get_Advance'
collect2: error: ld returned 1 exit status
我已经安装了libcvd和libtiff4-dev。有人知道如何解决这个问题吗

非常感谢

编辑:根据建议,我包括CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.3)
project(test)
set (test_VERSION "0.0.1")


find_package(OpenCV REQUIRED)

find_package(catkin REQUIRED COMPONENTS
  test_core
  cv_bridge
  image_transport
  roscpp
)

find_package(tracker)

set (CMAKE_CXX_FLAGS "-DNDEBUG -DNTIMING -DNRUN_UNIT_TESTS -g -O0 -std=c++11")

catkin_package(
  INCLUDE_DIRS include
)


include_directories (include
  ${CMAKE_CURRENT_SOURCE_DIR}/include
  ${tracker_INCLUDE_DIRS}
  ${TRIANGULATION_INCLUDE_DIRS}
  ${OPENCV_INCLUDE_DIRS}
)

include_directories(/usr/local/MATLAB/R2014a/extern/include)

include_directories (SYSTEM
  ${catkin_INCLUDE_DIRS}
)

set (SOURCE
  src/test/main.cc
  src/test/rosbridge.cc
  src/test/core.cc
)

add_executable (test ${SOURCE})

target_link_libraries(test
  /lib/x86_64-linux-gnu/libssl.so.1.0.0
  /lib/x86_64-linux-gnu/libcrypt.so.1
  /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
  /usr/local/MATLAB/R2014a/bin/glnxa64/libmx.so
  /usr/local/MATLAB/R2014a/bin/glnxa64/libeng.so
  /usr/local/MATLAB/R2014a/bin/glnxa64/libmat.so
  /usr/local/MATLAB/R2014a/bin/glnxa64/libut.so
  ${OpenCV_LIBS}
  ${tracker_LIBRARIES}
  cvd
  ${catkin_LIBRARIES}
  ${TRIANGULATION_LIBRARIES}
)

仅链接cvd在您的情况下似乎不起作用。 CMake附带了很棒的
find_包
功能,所以让我们使用它:

  • 在文件顶部添加
    查找包(需要CVD)
  • ${CVD\u INCLUDE\u DIRS}
    添加到
    INCLUDE\u目录
  • 目标链接库中的
    cvd
    替换为
    ${cvd\u库}
  • 这可能无法立即工作,但会引发类似“FindCVD.cmake not found”的错误。这是一个脚本,用于在文件系统中搜索此库在系统上的实际位置,并存储上述变量的路径。许多库已经自带了这样的文件,但如果不是这样,您必须手动提供它。但是,在大多数情况下,您不必自己编写这个文件,因为通常有很多开源项目已经创建了这样一个文件,您可以重用它(例如)。只需谷歌“FindCVD.cmake”就可以找到它们

    获得此文件后:

  • 在项目中创建一个名为“cmake”的新子目录,并将文件存储在那里
  • CMakeLists.txt的顶部添加
    set(CMAKE\u模块\u路径${PROJECT\u SOURCE\u DIR}/CMAKE)
    (在
    find\u包调用之前!)
  • 现在它应该可以工作了:)

    我修好了

    您必须链接lib文件夹中的libtiff lib,如下所示:

    target_link_libraries(test
      .
      .
      .
      /usr/lib/x86_64-linux-gnu/libtiff.so.5  
      .
      .
      .
    )
    

    库是否与可执行文件链接?请发布相应的
    CMakeLists.txt
    ,问题可能就在这个文件中。我编辑了我以前的帖子并添加了
    CMakeLists.txt
    ,非常感谢您的帮助和解释得非常好的答案。不幸的是,我仍然得到了完全相同的错误:-(嗯,只是一个猜测,但可能您也必须显式地链接libtiff(使用与上面相同的过程)。这也是我的想法,因此我试图找到一个
    FindLibTiff.cmake
    文件。我在这里找到的唯一一个文件是:但是,通过尝试编译,我得到了以下错误:
    cmake-error-at-test/cmake/FindLibTiff.cmake:10(包括):include找不到加载文件
    @snow:此处使用的LibFindMacros模块不是cmake本身的一部分,但可以下载。只需将该文件存储在与find*.cmake文件相同的目录中即可。我从中包含了LibFindMacros模块。现在,我从
    FindLibTiff.cmake
    中没有收到任何错误,但仍有原始issue:-(