基于Inter32的虚拟机的ARM32交叉编译环境配置(ubunt)

一:配置环境

cd /opt/
sudo tar -xvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar -C .

 

/etc/bash.bashrc中加入:

export PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/bin:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export LD=arm-linux-gnueabihf-ld
export AR=arm-linux-gnueabihf-ar
export AS=arm-linux-gnueabihf-as
export RANLIB=arm-linux-gnueabihf-ranlib

#强行指定所有依赖库路径,同样也可以使用另一种方式ld.so.conf也可以加入路径,但那里面会有很多模块加载,如果先加载到inter的库,就会使用inter依赖库编译,运行肯定会出问题。下面方式比较保险。
export LD_LIBRARY_PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/libc/lib:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/lib

 

二:指定库搜索路径,有三种方法(选择1种即可)

1:

export LD_LIBRARY_PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/libc/lib:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/lib

如果该变量有多个路径,遵从先到先得的原则,即前面的和后面的存在同样的库文件,会取到前面的。

2:

cd /etc/

cat ld.so.conf

cd ld.so.conf.d

建立arm-linux-gnueabihf.conf

vim arm-linux-gnueabihf.conf

加入:/opt/gcc-linaro-7.4.1-2019.02-i686_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib

保存退出,

刷新ld.so.cache(敲入命令:ldconfig),这个缓存是为了增加搜索lib库的速度,不用每次都读文件而是预先将文件路径读入到内存中。

如果不配置第2点,还没有配置第1,3点,搜索路径时会从$PATH中获取,先到先得。

3.在编译阶段,加入指定搜索路径:

 -L /opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf -L  /opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/libc/lib:/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/arm-linux-gnueabihf/lib -lxxx -lxxx -lxxx

 

关于库的扩展:想运行时指定依赖库的搜索,还有一种方法在编译阶段指定绝对路径,编译选项:

-Wl,-rpath /xxx/yyy/zzz/

 

话外:.so.1.2.3中1表示主版本号,2为次版本号,3为发布版本号。一般更新so库是在主版本号相同的情况下走更新流程,如果主版本号不同一般是要从装的。

reboot重启虚拟机

 

三,编译连接

 $CC ...

$CXX...

 

 

 


 

 

 

 

你可能感兴趣的:(ARM嵌入式开发,交叉编译环境)