2015-10-16 96 views
0

我有一個與CMake代碼庫。最初我的Boost 1.48。今天升級到最新版本(即1.59)。我有Ubuntu的12.04。問題與升級升壓在Ubuntu 12.04

我有一個使用boost :: thread的代碼庫。 現在它給以下錯誤:

Linking CXX executable /home/eeuser/ros_workspaces/HeloRosProject/devel/lib/visensor_node/visensor_node 
/home/eeuser/ros_workspaces/HeloRosProject/devel/lib/libvisensor.so: error: undefined reference to 'boost::thread::join_noexcept()' 
/home/eeuser/ros_workspaces/HeloRosProject/devel/lib/libvisensor.so: error: undefined reference to 'boost::thread::start_thread_noexcept()' 
collect2: ld returned 1 exit status 
make[2]: *** [/home/eeuser/ros_workspaces/HeloRosProject/devel/lib/visensor_node/visensor_node] Error 1 
make[1]: *** [visensor_node/CMakeFiles/visensor_node.dir/all] Error 2 
make: *** [all] Error 2 
Invoking "make" failed 

這裏是我的cmakefile看起來像

cmake_minimum_required(VERSION 2.8.3) 
project(visensor_node) 

find_package(catkin REQUIRED COMPONENTS 
    roscpp 
    message_generation 
    geometry_msgs 
    sensor_msgs 
    cv_bridge 
    std_msgs 
    image_transport 
    camera_info_manager 
    dynamic_reconfigure 
    cmake_modules 
) 

# check libvisensor version, flags not used later 
find_package(libvisensor 1.1.0 REQUIRED) 
find_package(Boost REQUIRED COMPONENTS system thread date_time) 
include_directories(${Boost_INCLUDE_DIRS}) 
find_package(Threads REQUIRED) 

set(Boost_USE_MULTITHREADED ON) 
add_message_files(
    DIRECTORY msg 
    FILES visensor_imu.msg 
    visensor_time_host.msg 
    visensor_calibration.msg 
) 

add_service_files(
    FILES 
    visensor_calibration_service.srv 
) 

generate_messages(DEPENDENCIES geometry_msgs) 

include_directories(include ${catkin_INCLUDE_DIRS} ${libvisensor_INCLUDE_DIRS}) 

find_package(Eigen REQUIRED) 
include_directories(${EIGEN_INCLUDE_DIR}) 
add_definitions(${EIGEN_DEFINITIONS}) 

find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc) 

generate_dynamic_reconfigure_options(cfg/visensor_node.cfg) 

if(NOT DEFINED CMAKE_BUILD_TYPE) 
    set(CMAKE_BUILD_TYPE Release) 
endif(NOT DEFINED CMAKE_BUILD_TYPE) 

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -std=c++0x -D__STRICT_ANSI__") 

catkin_package(
    INCLUDE_DIRS include ${catkin_INCLUDE_DIRS} 
    CATKIN_DEPENDS 
    roscpp 
    sensor_msgs 
    cv_bridge 
    std_msgs 
    image_transport 
    camera_info_manager 
) 

#build and add libvisensor system library dependency 
add_executable(visensor_node src/visensor_node.cpp src/visensor.cpp) 

add_dependencies(visensor_node ${${PROJECT_NAME}_EXPORTED_TARGETS}}) 
target_link_libraries(visensor_node ${libvisensor_LIBRARIES} ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} ${Boost_THREAD_LIBRARY}) 

快把我逼瘋了這個錯誤...! 請幫忙。

+0

你使用羅斯水電? – ARG

+0

您的ROS版本可能與較新的Boost不兼容。另請參閱[此答案](http://stackoverflow.com/a/33231855/2095383)。 – luator

回答

0

很可能你沒有鏈接到Boost線程二進制文件(libboost_thread.so),它與編譯時使用的頭文件版本相匹配。

也許你可以讓CMake告訴你包含的確切包含目錄和庫目錄。

如果它們看起來不錯(例如-I /my/boost/path/boost-L /my/boost/path/stage/libs),那麼您一定已經忘記了構建1.59版本的庫。