NAO机器人加载本地C++模块报错:wrong ELF class: ELFCLASS64
问题解决:NAO机器人加载64位模块失败
核心原因
NAO机器人(尤其是旧款型号)采用32位ARM架构,你编译生成的libmymodule.so是64位(ELFCLASS64),机器人系统无法兼容加载64位库,因此触发报错。
你本地SDK里的64位库仅适用于开发主机(x86_64架构),并非针对机器人的运行库。
解决步骤
- 使用NAO官方提供的交叉编译工具链替代本地主机gcc,这套工具链包含适配ARM 32位架构的编译器、链接器等工具。
- 调整CMake配置:编译模块时必须指定交叉编译工具链文件,确保编译目标为ARM 32位。示例CMakeLists.txt配置:
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) # 指定交叉编译器路径 set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) - 重新编译生成32位的
libmymodule.so,上传至机器人后再次测试。 - 验证库架构:本地执行
file libmymodule.so命令,正确输出应包含ARM和32-bit标识。
额外检查
- 确认autoload.ini中的路径指向机器人上32位库的正确存放位置。
- 登录机器人执行
uname -m,输出应为armv7l(32位ARM架构标识)。
内容的提问来源于stack exchange,提问作者Emanuel Marquez
相关产品推荐
相关产品推荐

