2015-10-16 97 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版本的库。