/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 0 has invalid symbol index 12

本文介绍了一种在Makefile配置中常见的链接错误及其解决方案。问题出现在使用未定义的变量指向对象文件时,导致链接阶段找不到相应的.o文件。通过将$(obj)更改为明确指定的对象文件列表$(objects),问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我写一个makefile文件后,make一下,发现此问题,其实是链接的时候出现的错误。

$(OBJNAME):$(objects)

$(CC) -o $(OBJNAME) $(obj)   $(LIB_PATHS) $(LDFLAGS)

此时的$(obj) 是没有定义,所以就找不到.o文件,呵呵,

改成 $(objects)就好。

--- stderr: pilz_industrial_motion_planner /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o: warning: relocation against `_ZTIN30pilz_industrial_motion_planner21PlanningContextLoaderE' in read-only section `.text._ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE[_ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE]' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o: in function `CommandPlannerTestDirect_FailOnLoadContext_Test::TestBody()::TestPlanningContextLoader::~TestPlanningContextLoader()': unittest_pilz_industrial_motion_planner_direct.cpp:(.text+0x93): undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o: in function `CommandPlannerTestDirect_FailOnLoadContext_Test::TestBody()': unittest_pilz_industrial_motion_planner_direct.cpp:(.text+0x3149): undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::PlanningContextLoader()' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o: in function `CommandPlannerTestDirect_FailOnLoadContext_Test::TestBody()::TestPlanningContextLoader::~TestPlanningContextLoader()': unittest_pilz_industrial_motion_planner_direct.cpp:(.text+0x4f): undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o: in function `std::_Sp_counted_ptr_inplace<CommandPlannerTestDirect_FailOnLoadContext_Test::TestBody()::TestPlanningContextLoader, std::allocator<CommandPlannerTestDirect_FailOnLoadContext_Test::TestBody()::TestPlanningContextLoader>, (__gnu_cxx::_Lock_policy)2>::_M_dispose()': unittest_pilz_industrial_motion_planner_direct.cpp:(.text+0x73): undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o: in function `std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > class_loader::impl::getAvailableClasses<pilz_industrial_motion_planner::PlanningContextLoader>(class_loader::ClassLoader const*)': unittest_pilz_industrial_motion_planner_direct.cpp:(.text._ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE[_ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE]+0x43): undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o:(.data.rel.ro+0x10): undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o:(.data.rel.ro+0x58): undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setModel(std::shared_ptr<moveit::core::RobotModel const> const&)' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/src/unittest_pilz_industrial_motion_planner_direct.cpp.o:(.data.rel.ro+0x60): undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setLimits(pilz_industrial_motion_planner::LimitsContainer const&)' /usr/bin/ld: ../../libplanning_context_loader_ptp.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::getAlgorithm[abi:cxx11]() const' /usr/bin/ld: warning: creating DT_TEXTREL in a PIE collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/build.make:363:test/unit_tests/unittest_pilz_industrial_motion_planner_direct] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:553:test/unit_tests/CMakeFiles/unittest_pilz_industrial_motion_planner_direct.dir/all] 错误 2 gmake[1]: *** 正在等待未完成的任务.... /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner.dir/src/unittest_pilz_industrial_motion_planner.cpp.o: warning: relocation against `_ZTIN30pilz_industrial_motion_planner21PlanningContextLoaderE' in read-only section `.text._ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE[_ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE]' /usr/bin/ld: CMakeFiles/unittest_pilz_industrial_motion_planner.dir/src/unittest_pilz_industrial_motion_planner.cpp.o: in function `std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > class_loader::impl::getAvailableClasses<pilz_industrial_motion_planner::PlanningContextLoader>(class_loader::ClassLoader const*)': unittest_pilz_industrial_motion_planner.cpp:(.text._ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE[_ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE]+0x45): undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: warning: creating DT_TEXTREL in a PIE collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_pilz_industrial_motion_planner.dir/build.make:361:test/unit_tests/unittest_pilz_industrial_motion_planner] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:835:test/unit_tests/CMakeFiles/unittest_pilz_industrial_motion_planner.dir/all] 错误 2 /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::getAlgorithm[abi:cxx11]() const' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setModel(std::shared_ptr<moveit::core::RobotModel const> const&)' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setLimits(pilz_industrial_motion_planner::LimitsContainer const&)' collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_trajectory_generator_lin.dir/build.make:364:test/unit_tests/unittest_trajectory_generator_lin] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:773:test/unit_tests/CMakeFiles/unittest_trajectory_generator_lin.dir/all] 错误 2 /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::getAlgorithm[abi:cxx11]() const' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setModel(std::shared_ptr<moveit::core::RobotModel const> const&)' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setLimits(pilz_industrial_motion_planner::LimitsContainer const&)' collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_trajectory_blender_transition_window.dir/build.make:380:test/unit_tests/unittest_trajectory_blender_transition_window] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:675:test/unit_tests/CMakeFiles/unittest_trajectory_blender_transition_window.dir/all] 错误 2 /usr/bin/ld: ../../libplanning_context_loader_ptp.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::getAlgorithm[abi:cxx11]() const' /usr/bin/ld: ../../libplanning_context_loader_ptp.so: undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: ../../libplanning_context_loader_ptp.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setModel(std::shared_ptr<moveit::core::RobotModel const> const&)' /usr/bin/ld: ../../libplanning_context_loader_ptp.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_ptp.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_ptp.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setLimits(pilz_industrial_motion_planner::LimitsContainer const&)' collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_trajectory_generator_ptp.dir/build.make:363:test/unit_tests/unittest_trajectory_generator_ptp] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:805:test/unit_tests/CMakeFiles/unittest_trajectory_generator_ptp.dir/all] 错误 2 /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::getAlgorithm[abi:cxx11]() const' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setModel(std::shared_ptr<moveit::core::RobotModel const> const&)' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setLimits(pilz_industrial_motion_planner::LimitsContainer const&)' collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_planning_context.dir/build.make:366:test/unit_tests/unittest_planning_context] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:1042:test/unit_tests/CMakeFiles/unittest_planning_context.dir/all] 错误 2 /usr/bin/ld: ../../libplanning_context_loader_circ.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::getAlgorithm[abi:cxx11]() const' /usr/bin/ld: ../../libplanning_context_loader_circ.so: undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: ../../libplanning_context_loader_circ.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setModel(std::shared_ptr<moveit::core::RobotModel const> const&)' /usr/bin/ld: ../../libplanning_context_loader_circ.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_circ.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_circ.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setLimits(pilz_industrial_motion_planner::LimitsContainer const&)' collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_trajectory_generator_circ.dir/build.make:364:test/unit_tests/unittest_trajectory_generator_circ] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:741:test/unit_tests/CMakeFiles/unittest_trajectory_generator_circ.dir/all] 错误 2 /usr/bin/ld: CMakeFiles/unittest_planning_context_loaders.dir/src/unittest_planning_context_loaders.cpp.o: warning: relocation against `_ZTIN30pilz_industrial_motion_planner21PlanningContextLoaderE' in read-only section `.text._ZN12class_loader4impl14createInstanceIN30pilz_industrial_motion_planner21PlanningContextLoaderEEEPT_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_11ClassLoaderE[_ZN12class_loader4impl14createInstanceIN30pilz_industrial_motion_planner21PlanningContextLoaderEEEPT_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_11ClassLoaderE]' /usr/bin/ld: CMakeFiles/unittest_planning_context_loaders.dir/src/unittest_planning_context_loaders.cpp.o: in function `std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > class_loader::impl::getAvailableClasses<pilz_industrial_motion_planner::PlanningContextLoader>(class_loader::ClassLoader const*)': unittest_planning_context_loaders.cpp:(.text._ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE[_ZN12class_loader4impl19getAvailableClassesIN30pilz_industrial_motion_planner21PlanningContextLoaderEEESt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISA_EEPKNS_11ClassLoaderE]+0x45): undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: CMakeFiles/unittest_planning_context_loaders.dir/src/unittest_planning_context_loaders.cpp.o: in function `pilz_industrial_motion_planner::PlanningContextLoader* class_loader::impl::createInstance<pilz_industrial_motion_planner::PlanningContextLoader>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, class_loader::ClassLoader*)': unittest_planning_context_loaders.cpp:(.text._ZN12class_loader4impl14createInstanceIN30pilz_industrial_motion_planner21PlanningContextLoaderEEEPT_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_11ClassLoaderE[_ZN12class_loader4impl14createInstanceIN30pilz_industrial_motion_planner21PlanningContextLoaderEEEPT_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_11ClassLoaderE]+0x44): undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: warning: creating DT_TEXTREL in a PIE collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_planning_context_loaders.dir/build.make:363:test/unit_tests/unittest_planning_context_loaders] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:1007:test/unit_tests/CMakeFiles/unittest_planning_context_loaders.dir/all] 错误 2 /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::getAlgorithm[abi:cxx11]() const' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `typeinfo for pilz_industrial_motion_planner::PlanningContextLoader' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setModel(std::shared_ptr<moveit::core::RobotModel const> const&)' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::~PlanningContextLoader()' /usr/bin/ld: ../../libplanning_context_loader_lin.so: undefined reference to `pilz_industrial_motion_planner::PlanningContextLoader::setLimits(pilz_industrial_motion_planner::LimitsContainer const&)' collect2: error: ld returned 1 exit status gmake[2]: *** [test/unit_tests/CMakeFiles/unittest_trajectory_generator_common.dir/build.make:365:test/unit_tests/unittest_trajectory_generator_common] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:709:test/unit_tests/CMakeFiles/unittest_trajectory_generator_common.dir/all] 错误 2 gmake: *** [Makefile:146:all] 错误 2 --- Failed <<< pilz_industrial_motion_planner [38.0s, exited with code 2]
最新发布
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值