ROS2 C++包colcon构建失败:未定义main函数引用错误
ROS2 C++节点编译失败:
undefined reference to main' 错误 报错信息
ros2_ws$ colcon build --packages-select my_cpp_pkg Starting >>> my_cpp_pkg --- stderr: my_cpp_pkg /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o: in function _start': (.text+0x1b): undefined reference to main' collect2: error: ld returned 1 exit status gmake[2]: *** [CMakeFiles/cpp_node.dir/build.make:151: cpp_node] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:137: CMakeFiles/cpp_node.dir/all] Error 2 gmake: *** [Makefile:146: all] Error 2 Failed <<< my_cpp_pkg [0.89s, exited with code 2] Summary: 0 packages finished [1.68s] 1 package failed: my_cpp_pkg 1 package had stderr output: my_cpp_pkg
现有CMakeLists.txt内容
cmake_minimum_required(VERSION 3.8) project(my_cpp_pkg) #default to c++14 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) add_executable(cpp_node src/my_first_node.cpp) ament_target_dependencies(cpp_node rclcpp) install(TARGETS cpp_node DESTINATION lib/${PROJECT_NAME} ) ament_package()
问题原因及解决方法
你的CMakeLists.txt配置无异常,报错核心原因是链接器无法在src/my_first_node.cpp文件中找到main函数的定义,可按以下步骤修复:
- 检查
src/my_first_node.cpp文件,确保包含标准ROS2节点的main函数结构,示例如下:
#include "rclcpp/rclcpp.hpp" int main(int argc, char **argv) { rclcpp::init(argc, argv); auto node = std::make_shared<rclcpp::Node>("my_first_node"); RCLCPP_INFO(node->get_logger(), "Hello ROS2!"); rclcpp::spin(node); rclcpp::shutdown(); return 0; }
- 确认文件路径正确:CMakeLists中指定的
src/my_first_node.cpp确实存在于包目录下,无拼写错误。 - 若文件已有main函数,检查是否存在语法错误(比如函数名拼写错误、命名空间包裹异常等)导致编译器未识别该函数。
内容的提问来源于stack exchange,提问作者Syed Khansa Ali
相关产品推荐
相关产品推荐

