Windows10+ROS2 humble刚配置好,老规矩,跑一下ros2 examples,完整的教程在这里,
Using colcon to build packages — ROS 2 Documentation: Humble documentation
因为我只是测试,所以只是简单执行:
git clone https://github.com/ros2/examples src/examples -b humble colcon build --symlink-install --merge-install
然后报错:
CMake Error at ament_cmake_symlink_install/ament_cmake_symlink_install.cmake:267 (message): ament_cmake_symlink_install_targets() can't find 'D:/mc/ros2prj/example_ws/build/examples_rclcpp_minimal_subscriber/Release/wait_set_subscriber_library.lib' Call Stack (most recent call first): ament_cmake_symlink_install_targets_3_Release.cmake:1 (ament_cmake_symlink_install_targets) ament_cmake_symlink_install/ament_cmake_symlink_install.cmake:323 (include) cmake_install.cmake:36 (include)
根据报错提示,打开cmake文本看一下,
src\examples\rclcpp\topics\minimal_subscriber\CMakeLists.txt
发现里面有这么一条,
add_library(wait_set_subscriber_library SHARED wait_set_subscriber.cpp static_wait_set_subscriber.cpp time_triggered_wait_set_subscriber.cpp) ament_target_dependencies(wait_set_subscriber_library rclcpp rclcpp_components std_msgs)
然后,在cpp项目中并没有找到RCLCPP_EXPORT这样的预定义,这是生成dll+lib所必须的;所以,根据默认的配置,只会生成dll文件,而不会有相应的lib文件;因此判断,这里在windows下,SHARED应该改成STATIC才行。修改后如下,
add_library(wait_set_subscriber_library STATIC wait_set_subscriber.cpp static_wait_set_subscriber.cpp time_triggered_wait_set_subscriber.cpp) ament_target_dependencies(wait_set_subscriber_library rclcpp rclcpp_components std_msgs)
然后再执行colcon,这个cpp程序就编译成功了。
本文结束。