环境变量配置
交叉编译工具链的路径配置是ARM开发的第一步,通过以下命令设置环境变量:
export PATH=$PATH:/opt/gcc-linux/arm-linux-gnueabihf/bin export PATH=$PATH:/opt/gcc-linux/bin
配置说明 :这两条命令将Linaro GCC 4.9的ARM交叉编译工具链添加到系统的PATH环境变量中,确保系统能够识别arm-linux-gnueabihf-前缀的编译命令。
依赖库分析
首次环境检查
使用arm-linux-gnueabihf-ldd命令分析目标程序的依赖关系:
@ubuntu:~/work/bin/release$ arm-linux-gnueabihf-ldd --root=/home/work/rootfs medianMachineServer
libQt5Widgets.so.5 not found
libQt5Gui.so.5 not found
libQt5Network.so.5 not found
libQt5Core.so.5 not found
libpthread.so.0 => /lib/libpthread.so.0 (0xdeadbeef)
libc.so.6 => /lib/libc.so.6 (0xdeadbeef)
ld-linux-armhf.so.3 => /lib/ld-linux-armhf.so.3 (0xdeadbeef)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xdeadbeef)
libm.so.6 => /lib/libm.so.6 (0xdeadbeef)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xdeadbeef)
检查结果:
- 缺失的Qt库:libQt5Widgets.so.5、libQt5Gui.so.5、libQt5Network.so.5、libQt5Core.so.5
- 可用的系统库:libpthread.so.0、libc.so.6、ld-linux-armhf.so.3、libstdc++.so.6、libm.so.6、libgcc_s.so.1
Qt环境验证
针对Qt ARM环境进行二次验证:
@ubuntu:~/work/bin/release$ arm-linux-gnueabihf-ldd --root=/home/qt/arm-qt5 medianMachineServer
libQt5Widgets.so.5 => /lib/libQt5Widgets.so.5 (0xdeadbeef)
libQt5Gui.so.5 => /lib/libQt5Gui.so.5 (0xdeadbeef)
libQt5Core.so.5 => /lib/libQt5Core.so.5 (0xdeadbeef)
libpthread.so.0 not found
libdl.so.2 not found
libstdc++.so.6 not found
libm.so.6 not found
libgcc_s.so.1 not found
libc.so.6 not found
ld-linux-armhf.so.3 => /lib/ld-linux-armhf.so.3 (0x8badf00d)
libQt5Network.so.5 => /lib/libQt5Network.so.5 (0xdeadbeef)
对比发现:
- Qt库完整:所有Qt5相关库文件在ARM Qt环境中均可找到
- 系统库缺失:基础C库和线程库在Qt环境中不可用
库文件部署方案
Qt库文件拷贝
将ARM Qt环境中的必要库文件复制到项目lib目录:
# 拷贝Qt组件库
cp -av /home/qt/arm-qt5/lib/libQt5Widgets* .
cp -av /home/qt/arm-qt5/lib/libQt5Gui* .
cp -av /home/qt/arm-qt5/lib/libQt5Network* .
cp -av /home/qt/arm-qt5/lib/libQt5Core* .
系统库补充
从rootfs环境中补充缺失的系统库:
# 系统线程和数学库
cp -av /home/work/rootfs/usr/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf/libpthread* .
cp -av /home/work/rootfs/usr/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf/libm* .
# C运行时库
cp -av /home/work/rootfs/usr/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf/libc* .
# C++标准库和GCC支持库
cp -av /home/work/rootfs/usr/arm-linux-gnueabihf/lib/libstdc++* .
cp -av /home/work/rootfs/usr/arm-linux-gnueabihf/lib/libgcc_s* .
实用建议
环境配置优化:
- 将环境变量配置添加到
~/.bashrc中实现永久生效 - 创建部署脚本自动化库文件拷贝过程
- 使用版本控制管理依赖库的变更