You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用catkin_make构建ROS项目时无法找到libdofbot_kinemarics.so的问题

问题原因与解决方案

第一个错误:/usr/bin/ld: cannot find -ldofbot_kinemarics

核心原因

链接器找不到指定的共享库,主要有两个可能:

  • libdofbot_kinemarics.so不在链接器默认搜索路径(系统库路径、catkin工作空间的devel/lib目录)内,且CMake未正确指定库的搜索路径。
  • CMakeLists.txt的写法存在问题:直接写libdofbot_kinemarics.so时,CMake会尝试在当前路径或默认路径查找文件,找不到就报错;若用-ldofbot_kinemarics的写法,链接器会自动补全lib前缀和.so后缀,但同样需要库在搜索路径内。

解决方法

  1. 先确认libdofbot_kinemarics.so的实际存放位置,比如项目根目录下的libs文件夹。
  2. 在CMakeLists.txt中用link_directories()指定库的搜索路径:
    link_directories(${PROJECT_SOURCE_DIR}/libs)
    
  3. 然后在target_link_libraries中使用去掉lib前缀和.so后缀的库名:
    target_link_libraries(dofbot_kinematics_fk ${catkin_LIBRARIES} dofbot_kinemarics)
    
    或者用find_library做更规范的路径指定:
    find_library(DOFBOT_KIN_LIB dofbot_kinemarics PATHS ${PROJECT_SOURCE_DIR}/libs NO_DEFAULT_PATH)
    target_link_libraries(dofbot_kinematics_fk ${catkin_LIBRARIES} ${DOFBOT_KIN_LIB})
    

第二个错误:/usr/bin/ld:libdofbot_kinemarics.so: error adding symbols: file in wrong format

核心原因

这个错误表明共享库的格式与当前编译环境不兼容,常见情况包括:

  • 架构不匹配:比如系统是x86_64(64位),但libdofbot_kinemarics.so是32位(i386/i686)编译产物;或者反过来。可以用以下命令验证:
    # 查看库的架构信息
    file libdofbot_kinemarics.so
    # 查看当前系统架构
    uname -m
    
  • 库文件损坏或类型错误:该文件不是合法的ELF共享库,比如是静态库(.a文件改了后缀)、未编译完成的目标文件(.o),或是在下载/拷贝过程中损坏。
  • ABI不兼容:库是用不同版本的编译器、ROS版本或系统库编译的,导致链接时符号无法匹配。

解决方法

  1. 验证库的架构与系统是否一致,不一致则需要重新编译对应架构的共享库。
  2. 用readelf -h libdofbot_kinemarics.so检查是否为合法的ELF共享库,若输出异常说明文件损坏,需重新获取或编译。
  3. 确保库的编译环境与当前ROS项目环境一致:使用相同的Ubuntu版本、ROS版本、编译器版本重新编译libdofbot_kinemarics.so。

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:50:21