ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

You are right that you need to link boost. I suspect the problem is that when you did, you need not put the rosbuild_link_boost line after the rosbuild_add_executable line. It should look like:

rosbuild_add_boost_directories()
rosbuild_add_executable(simple_navigation_goals src/simple_navigation_goals.cpp)
rosbuild_link_boost(${PROJECT_NAME} thread)

You are right that you need to link boost. However, I suspect the problem is that when you did, you think you did not do so quite correctly. You don't actually need not put to specify the boost distribution and you also want the rosbuild_link_boost line after the rosbuild_add_executable line. It should look like:

rosbuild_add_boost_directories()
rosbuild_add_executable(simple_navigation_goals src/simple_navigation_goals.cpp)
rosbuild_link_boost(${PROJECT_NAME} thread)

Here is my entire CMakeLists.txt file. I was able to compile the example with this file:

cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)

# Set the build type.  Options are:
#  Coverage       : w/ debug symbols, w/o optimization, w/ code-coverage
#  Debug          : w/ debug symbols, w/o optimization
#  Release        : w/o debug symbols, w/ optimization
#  RelWithDebInfo : w/ debug symbols, w/ optimization
#  MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
#set(ROS_BUILD_TYPE RelWithDebInfo)

rosbuild_init()

#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#uncomment if you have defined messages
#rosbuild_genmsg()
#uncomment if you have defined services
#rosbuild_gensrv()

#common commands for building c++ executables and libraries
#rosbuild_add_library(${PROJECT_NAME} src/example.cpp)
#target_link_libraries(${PROJECT_NAME} another_library)
rosbuild_add_boost_directories()
rosbuild_add_executable(simple_navigation_goals src/simple_navigation_goals.cpp)
rosbuild_link_boost(${PROJECT_NAME} thread)
#target_link_libraries(example ${PROJECT_NAME})

You are right that you need to link boost. However, I think you did not do so quite correctly. You don't actually need to specify the boost distribution and you also want the rosbuild_link_boost line after the rosbuild_add_executable line. It should look like:

rosbuild_add_boost_directories()
rosbuild_add_executable(simple_navigation_goals src/simple_navigation_goals.cpp)
rosbuild_link_boost(${PROJECT_NAME} thread)

Here is my entire CMakeLists.txt file. I saw the same error as you did without linking boost, but was able to compile the example with this file:

cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)

# Set the build type.  Options are:
#  Coverage       : w/ debug symbols, w/o optimization, w/ code-coverage
#  Debug          : w/ debug symbols, w/o optimization
#  Release        : w/o debug symbols, w/ optimization
#  RelWithDebInfo : w/ debug symbols, w/ optimization
#  MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
#set(ROS_BUILD_TYPE RelWithDebInfo)

rosbuild_init()

#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#uncomment if you have defined messages
#rosbuild_genmsg()
#uncomment if you have defined services
#rosbuild_gensrv()

#common commands for building c++ executables and libraries
#rosbuild_add_library(${PROJECT_NAME} src/example.cpp)
#target_link_libraries(${PROJECT_NAME} another_library)
rosbuild_add_boost_directories()
rosbuild_add_executable(simple_navigation_goals src/simple_navigation_goals.cpp)
rosbuild_link_boost(${PROJECT_NAME} thread)
#target_link_libraries(example ${PROJECT_NAME})