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

无sudo权限Ubuntu14.04本地安装aruco 2.0.19及ROS编译问题求助

解决无sudo权限下安装Aruco库及ROS链接错误问题

一、无sudo权限下本地安装Aruco库

你不需要直接修改Makefile,CMake本身支持指定自定义安装路径,这是更标准且可靠的做法:

  1. 清理现有build目录(如果之前已生成过):
    cd /hri/localdisk/markus/software/aruco-2.0.19
    rm -rf build && mkdir build && cd build
    
  2. CMake阶段指定安装路径:
    用CMAKE_INSTALL_PREFIX参数指定一个你有写入权限的目录,比如专属的本地软件目录:
    cmake .. -DCMAKE_INSTALL_PREFIX=/hri/localdisk/markus/software/aruco_local_install
    
    这个参数会把Aruco的头文件、库文件、CMake配置文件都安装到指定目录下,完全不会触碰/usr这类需要权限的系统路径。
  3. 编译并完成安装:
    make
    make install
    
    执行完成后,你会在指定目录下看到include/aruco、lib、lib/cmake/aruco这些子目录,所有文件都在你的可控范围内。

二、解决ROS包的链接错误

你的链接错误核心原因是没有正确链接Aruco的库文件——之前的target_link_libraries里写的是目录路径,而非实际的库文件。调整你的CMakeLists.txt如下:

修改后的关键配置片段:

cmake_minimum_required(VERSION 2.8.3)
PROJECT(ros_aruco)

FIND_PACKAGE(catkin REQUIRED COMPONENTS roscpp tf std_msgs sensor_msgs geometry_msgs message_generation genmsg cv_bridge image_transport)

# 1. 指定本地安装的Aruco根目录(和cmake时的CMAKE_INSTALL_PREFIX保持一致)
set(ARUCO_INSTALL_PATH "/hri/localdisk/markus/software/aruco_local_install")
# 让CMake能自动找到Aruco的CMake配置文件
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${ARUCO_INSTALL_PATH})

# 2. 正常查找Aruco库(现在CMake会定位到本地安装的版本)
FIND_PACKAGE(aruco REQUIRED)
FIND_PACKAGE(OpenCV REQUIRED)

INCLUDE(FindPkgConfig)
SET(ROS_BUILD_TYPE Release)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -march=core-avx-i -O2")

# 3. 包含头文件目录(使用find_package生成的变量,避免硬编码)
include_directories(
  ${catkin_INCLUDE_DIRS}
  ${ARUCO_INCLUDE_DIRS}
)

add_executable(ros_aruco src/ros_aruco.cpp )
add_dependencies(ros_aruco ${catkin_EXPORTED_TARGETS})

# 4. 链接库文件(关键:用${ARUCO_LIBRARIES}替换之前的目录路径)
target_link_libraries(ros_aruco
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
  ${ARUCO_LIBRARIES}
)

额外注意事项:

  • 如果你之前已经编译过这个ROS包,先删除包的build和devel目录,重新执行catkin_make或catkin build,避免旧的CMake缓存干扰新配置。
  • 确保ARUCO_INSTALL_PATH和你安装Aruco时指定的CMAKE_INSTALL_PREFIX完全一致,路径拼写不能出错。

错误原因说明

你遇到的undefined reference是链接器报错:编译器能找到Aruco的头文件(所以没有编译错误),但链接器找不到实现这些函数的库文件(.so或.a)——因为你没有把Aruco的库文件路径传给链接器。使用find_package(aruco REQUIRED)后,CMake会自动设置ARUCO_LIBRARIES变量,指向正确的库文件路径,解决链接问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:55