首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROS中的libtiff4错误

ROS中的libtiff4错误
EN

Stack Overflow用户
提问于 2015-04-21 00:12:02
回答 2查看 1.3K关注 0票数 3

在Ubuntu14.04下,我试图从一个有catkin的朋友那里编译一个ROS-包,并得到以下错误:

代码语言:javascript
复制
/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:

代码语言:javascript
复制
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}
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-28 20:21:26

我修好了!

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

代码语言:javascript
复制
target_link_libraries(test
  .
  .
  .
  /usr/lib/x86_64-linux-gnu/libtiff.so.5  
  .
  .
  .
)
票数 1
EN

Stack Overflow用户

发布于 2015-04-22 07:37:51

在您的情况下,仅仅链接cvd似乎不起作用。不过,CMake附带了一个很棒的find_package特性,所以让我们使用它:

  1. 在文件顶部添加find_package(CVD REQUIRED)
  2. ${CVD_INCLUDE_DIRS}添加到include_directories
  3. cvd替换target_link_libraries中的${CVD_LIBRARIES}

这可能不会立即起作用,但会抛出一个类似于"FindCVD.cmake not“之类的错误。这是一个脚本,在您的文件系统中搜索这个库的实际位置,并存储到上面使用的变量的路径。许多库已经自己带来了这样的文件,但是如果不是这样,您必须手动提供它。但是,在大多数情况下,您不必自己编写这个文件,因为通常有许多开源项目已经创建了这样一个文件,您可以重用这个文件(例如这里)。只要谷歌"FindCVD.cmake“找到他们。

一旦你有了这个文件:

  1. 在项目中创建一个名为"cmake“的新子目录,并将文件存储在那里。
  2. set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)添加到CMakeLists.txt的顶部(在find_package调用之前!)

现在希望它能起作用:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29760640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档