一:配置环境
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...