Ошибка libtiff4 с ROS
Я пытаюсь скомпилировать ROS-пакет от друга с catkin под Ubuntu 14.04 и получаю следующую ошибку:
/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}
)
2 ответа
Я починил это!
Вы должны создать ссылку на libtiff lib в вашей папке lib следующим образом:
target_link_libraries(test
.
.
.
/usr/lib/x86_64-linux-gnu/libtiff.so.5
.
.
.
)
Просто ссылки cvd
Кажется, не работает в вашем случае.
CMake поставляется с большим find_package
особенность, так что давайте использовать его:
- добавлять
find_package(CVD REQUIRED)
в верхней части файла - добавлять
${CVD_INCLUDE_DIRS}
вinclude_directories
- замещать
cvd
вtarget_link_libraries
с${CVD_LIBRARIES}
Это может не сработать сразу, но выдает ошибку типа "FindCVD.cmake not found". Это скрипт, который ищет в вашей файловой системе фактическое местоположение этой библиотеки в вашей системе и сохраняет пути к переменным, использованным выше. Многие библиотеки уже сами приносят такой файл, но если это не так, вы должны предоставить его вручную. В большинстве случаев вам не нужно писать этот файл самостоятельно, хотя, как правило, существует множество проектов с открытым исходным кодом, которые уже создали такой файл, который вы можете использовать повторно (например, здесь). Просто Google "FindCVD.cmake", чтобы найти их.
Как только у вас есть этот файл:
- Создайте новый подкаталог с именем "cmake" в своем проекте и сохраните файл там.
- добавлять
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
в верхней части вашегоCMakeLists.txt
(передfind_package
вызов!)
Надеюсь, теперь это сработает:)