交叉编译PCL-1.8.1至ARM架构时CMake提示HAVE_POSIX_MEMALIGN错误
解决交叉编译PCL 1.8.1到ARM时的TRY_RUN错误
当你用Jetson的GCC 4.8.5工具链交叉编译PCL到ARM架构时,CMake的TRY_RUN()机制会直接踩坑——它没法在x86主机上运行ARM架构的测试程序,所以才会抛出关于HAVE_POSIX_MEMALIGN_EXITCODE的错误。下面是几个直接能解决问题的办法:
1. 配置CMake时手动指定测试结果
Jetson的Linux系统本身是支持posix_memalign的,而mm_malloc大概率在你的环境里不可用,所以可以直接在cmake命令里硬编码这些测试的结果:
cmake \ -DCMAKE_TOOLCHAIN_FILE=你的Jetson工具链配置文件.cmake \ -DHAVE_POSIX_MEMALIGN=ON \ -DHAVE_POSIX_MEMALIGN_EXITCODE=0 \ -DHAVE_MM_MALLOC=OFF \ -DHAVE_MM_MALLOC_EXITCODE=1 \ ../pcl-1.8.1
参数说明:
HAVE_POSIX_MEMALIGN=ON:告诉CMake目标ARM平台支持posix_memalignHAVE_POSIX_MEMALIGN_EXITCODE=0:模拟测试程序运行成功的退出码HAVE_MM_MALLOC=OFF:标记mm_malloc在目标平台不可用HAVE_MM_MALLOC_EXITCODE=1:模拟测试程序运行失败的退出码
2. 直接修改已生成的CMakeCache.txt
如果已经运行过cmake生成了build目录,也可以直接编辑build/CMakeCache.txt,找到对应变量修改值:
HAVE_POSIX_MEMALIGN:BOOL=ON HAVE_POSIX_MEMALIGN_EXITCODE:STRING=0 HAVE_MM_MALLOC:BOOL=OFF HAVE_MM_MALLOC_EXITCODE:STRING=1
修改完重新执行cmake --build .就能继续编译了。
3. 额外注意点
- 确保你的工具链文件配置正确:要设置
CMAKE_SYSTEM_NAME=Linux,指定正确的ARM交叉编译器路径(比如CMAKE_C_COMPILER=aarch64-linux-gnu-gcc),以及对应的系统根目录。 - PCL的依赖项(Boost、Eigen、FLANN等)必须提前交叉编译好,并且在cmake时通过
-DBOOST_ROOT、-DEIGEN_INCLUDE_DIR等参数指定路径,别让CMake误用到主机上的x86版本依赖。
内容的提问来源于stack exchange,提问作者juzzlin
相关产品推荐
相关产品推荐

