1. 环境准备与工具链配置
在ARM平台上进行PCL交叉编译,第一步就是搭建合适的开发环境。我推荐使用Ubuntu 18.04或20.04作为开发主机,这两个版本在兼容性和稳定性方面都经过验证。安装完基础系统后,我们需要配置专门的交叉编译工具链。
我实测过多个版本的ARM工具链,最终发现Linaro GCC 6.3.1在兼容性和性能方面表现最为稳定。你可以从Linaro官网下载预编译的工具链包,解压到/opt目录下是个不错的选择,这样便于系统管理:
sudo tar -xvf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz -C /opt/
接下来需要配置环境变量,让系统能够找到交叉编译工具。编辑你的bash配置文件:
echo 'export PATH=$PATH:/opt/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin' >> ~/.bashrc
source ~/.bashrc
验证工具链是否安装成功很简单,只需要检查编译器版本:
aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-g++ --version
如果看到正确的版本信息输出,说明工具链已经就绪。这里有个小坑需要注意:有些Ubuntu系统可能需要安装32位兼容库,如果遇到"找不到文件"的错误,可以尝试安装以下包:
sudo apt-get install lib32ncurses5 lib32z1 lib32stdc++6
2. 依赖库的交叉编译
PCL库依赖于多个第三方库,这些都需要先进行交叉编译。根据我的经验,编译顺序很关键:Boost → Eigen → LZ4 → FLANN。每个库的编译都有其特殊性,下面我来详细说明。
2.1 Boost库的编译
Boost是PCL最核心的依赖,我推荐使用1.65.0版本,这个版本与PCL 1.12.1兼容性最好。下载源码后,首先需要配置编译环境:
./bootstrap.sh --with-libraries=system,filesystem,thread,date_time,iostreams
关键步骤是修改project-config.jam文件,指定使用ARM交叉编译器。找到using gcc部分,修改为:
using gcc : arm : /opt/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ;
编译时需要特别注意-fPIC参数,这是生成位置无关代码所必须的:
./b2 cxxflags=-fPIC cflags=-fPIC -a install --prefix=./install
整个过程可能需要30分钟到1小时,取决于你的机器性能。编译完成后,检查install目录下是否生成了ARM架构的库文件:
file install/lib/libboost_system.so
应该显示为ARM aarch64架构,而不是x86_64。
2.2 Eigen库的编译
Eigen是纯头文件库,编译相对简单。我建议使用Eigen 3.3.0或更高版本,因为PCL 1.12.1对低版本支持不佳。使用CMake进行交叉编译:


3104

被折叠的 条评论
为什么被折叠?



