ROS2 error: can‘t find examples_rclcpp_minimal_subscriber/Release/wait_set_subscriber_library.lib

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程序就编译成功了。

本文结束。

### ROS2 C++ 开发教程与示例代码 以下是关于ROS2和C++开发的详细信息,包括教程、示例代码以及如何创建和构建项目。 #### 初始化工作空间 在开始开发之前,需要初始化一个ROS2工作空间。可以使用以下命令创建并初始化工作空间[^3]: ```bash mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build # 构建空工作空间 ``` #### 创建C++包 要创建一个新的C++包,可以使用`ros2 pkg create`命令。例如,创建一个名为`cpp_pubsub`的包[^2]: ```bash ros2 pkg create --build-type ament_cmake --license Apache-2.0 cpp_pubsub ``` 这将生成一个基本的CMake配置文件和其他必要的文件结构。 #### 示例代码:服务器与客户端 ROS2提供了官方示例代码,位于`ros2/examples`存储库中。其中,`minimal_action_server`和`minimal_action_client`是两个非常有用的示例,展示了如何用C++编写操作服务器和客户端[^1]。 以下是一个简单的发布者(Publisher)和订阅者(Subscriber)的C++示例代码: **发布者(Publisher)代码** ```cpp #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" int main(int argc, char * argv[]) { rclcpp::init(argc, argv); auto node = rclcpp::Node::make_shared("cpp_publisher"); auto publisher = node->create_publisher<std_msgs::msg::String>("topic", 10); rclcpp::WallRate loop_rate(1); int count = 0; while (rclcpp::ok()) { auto message = std::make_shared<std_msgs::msg::String>(); message->data = "Hello, world! " + std::to_string(count++); RCLCPP_INFO(node->get_logger(), "Publishing: '%s'", message->data.c_str()); publisher->publish(*message); loop_rate.sleep(); } rclcpp::shutdown(); return 0; } ``` **订阅者(Subscriber)代码** ```cpp #include "rclcpp/rclcpp.hpp" #include "std_msgs/msg/string.hpp" void chatter_callback(const std_msgs::msg::String::SharedPtr msg) { RCLCPP_INFO(rclcpp::get_logger("cpp_subscriber"), "I heard: '%s'", msg->data.c_str()); } int main(int argc, char * argv[]) { rclcpp::init(argc, argv); auto node = rclcpp::Node::make_shared("cpp_subscriber"); auto subscription = node->create_subscription<std_msgs::msg::String>( "topic", 10, chatter_callback); rclcpp::spin(node); rclcpp::shutdown(); return 0; } ``` #### 管理依赖项 为了确保所有依赖项正确安装,可以使用`rosdep`工具来管理依赖项[^3]: ```bash sudo rosdep init rosdep update rosdep install --from-paths src --ignore-src -r -y ``` #### 构建项目 完成代码编写后,可以通过以下命令构建整个工作空间: ```bash colcon build ``` 构建完成后,可以运行节点: ```bash source install/setup.bash ros2 run cpp_pubsub cpp_publisher ros2 run cpp_pubsub cpp_subscriber ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值