ARM-Linux Gcc 交叉编译环境搭建
阅读原文时间:2023年07月09日阅读:1

测试宿主机与目标板ping通

目标板上某个文件夹(例如mnt)挂载到宿主机(192.168.1.111)的/home/nfs_dir文件夹下

mount –t nfs –o nolock 192.168.1.111:/home/nfs_dir /mnt

参考http://linux-sunxi.org/Toolchain 通过apt-get可以很简单地安装交叉编译环境

Ubuntu

Recent (from12.04 on)

A complete cross toolchain is available asa package, just run:

apt-get install gcc-arm-linux-gnueabihf

Debian

Details on Cross-development Toolchainsfor Debian are at the DebianWiki.

Note: Debian now hascross-toolchains in the archive, superseding those at emdebian.org

Currently (December 2015) available forunstable and testing in the standard repositories.

Install Cross Compiler and build utilities:

dpkg --add-architecture armhf
apt-get update
apt-get install g++-arm-linux-gnueabihf

安装之后在终端输入 arm 按下tab 并且自动补全之后,输入

arm-linux-gnueabihf-gcc -v

如果安装成功终端会打印出以下信息:

Using built-in specs.

COLLECT_GCC=arm-linux-gnueabihf-gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.7/lto-wrapper

Target: arm-linux-gnueabihf

Configured with: ../src/configure -v--with-pkgversion='Ubuntu/Linaro 4.7.1-5ubuntu1~ppa1'--with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs--enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr--program-suffix=-4.7 --enable-shared --enable-linker-build-id--with-system-zlib --libexecdir=/usr/lib --without-included-gettext--enable-threads=posix--with-gxx-include-dir=/usr/arm-linux-gnueabihf/include/c++/4.7.1 --libdir=/usr/lib--enable-nls --enable-clocale=gnu --enable-libstdcxx-debug--enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libitm--enable-plugin --enable-objc-gc --enable-multilib --disable-sjlj-exceptions--with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb--disable-werror --enable-checking=release --build=x86_64-linux-gnu--host=x86_64-linux-gnu --target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf---includedir=/usr/arm-linux-gnueabihf/include--with-headers=/usr/arm-linux-gnueabihf/include--with-libs=/usr/arm-linux-gnueabihf/lib

Thread model: posix

gcc version 4.7.1 (Ubuntu/Linaro4.7.1-5ubuntu1~ppa1)

apt-get方式进行安装已经配置好了环境变量,如果自己下载源码编译安装或者直接安装bin文件,则还需要设置环境变量(链接)

vi /etc/bash.bashrc
export PATH=$PATH:编译器安装路径
source /root/.bashrc

安装完交叉编译器,就可以生成目标板的可执行程序

遇到以下问题

1 运行程序时提示“-sh: ./pl: not found”

解决办法

目标板上没有运行程序所需要的库,查看所需要的库的方法

readelf -ahello | grep NEEDED

最后终端会打印出该程序执行的依赖库,将相应的库拷贝的lib文件夹下即可。

注意:该依赖库需要使用相同版本的交叉编译器

解决方法:

方法1、 把这些所需要的库拷贝到板子上,保证板子上找得到。

方法2、 编译的时候使用静态编译,arm-linux-gcc-o hello hello.c -static