一、获取到交叉编译器
例如:arm-linux-gcc-4.4.3.tar.gz
二、创建交叉编译器安装目录(需配置在PATH环境变量中)
#myarm由自己定义
三、将交叉编译器压缩包拷贝到安装目录,或通过-C 指定解压到安装目录
方法1)进入到交叉编译器压缩包所在目录,执行命令:
解压压缩包:
方法2)进入到交叉编译器压缩包所在目录,执行命令:
额外命令:如果文件夹名字太长可以用mv命令更改名字(sudo mv 源目录 目的目录):
四、进入到编译器可执行程序所在的bin目录,执行pwd命令获得完整路径。
$ pwd
/usr/local/myarm/arm-linux-gcc-4.4.3/bin
五、配置环境变量PATH
先介绍下系统级的配置文件/etc/bash.bashrc和用户级的配置文件~/.bashrc的区别:
1)作用范围:
/etc/bash.bashrc:对系统中的所有用户生效。当新用户登录系统或者新打开一个终端会话时,如果系统引用了这个配置文件,其中的设置和命令将会被执行,对所有用户产生统一的影响。
~/.bashrc:位于用户的主目录下(~ 表示用户主目录)。每个用户都有自己独立的 .bashrc 文件,仅对当前用户生效。当该用户登录系统或打开新的终端会话时,系统会读取这个文件来执行其中的设置和命令。
2)配置内容:
/etc/bash.bashrc:通常包含一些系统管理员设置的全局环境变量、别名、函数等通用的配置和初始化设置,适用于整个系统的默认设置。
~/.bashrc:用户可以根据自己的需求和偏好自定义环境变量、别名、函数、命令提示符格式等个性化的设置,以满足自己的工作环境和习惯。
3)优先级:
如果两者存在相同的配置项,对于当前用户来说,~/.bashrc 中的设置会覆盖/etc/bash.bashrc 中的相同设置。也就是说,用户级的配置会优先于系统级的配置。
编辑~/.bashrc文件(编辑/etc/bash.bashrc文件同此方法)
(此处输入用户登录密码,隐藏不可见)
在~/.bashrc文件的最后添加:
六、更新环境变量、检查环境变量、检查编译器版本
#更新环境变量PATH
#检查环境变量PATH
#检查编译器版本
七、出现问题如下:
1)编译源码时发现未安装make工具:
解决方法:安装make工具
2)安装后编译时报下面错误:
$ make
arm-linux-gcc -I. -c -o protocol.o protocol.c
/usr/local/myarm/arm-linux-gcc-4.4.3/bin/arm-linux-gcc: 15: exec:
/usr/local/myarm/arm-linux-gcc-4.4.3/bin/.arm-none-linux-gnueabi-gcc: not found
make: *** [<内置>:protocol.o] 错误 127
是因为在64位的Ubuntu20.04的Linux系统中无法兼容32位的交叉编译器。
解决方法是安装32位的运行库,执行以下命令:sudo apt-get install libc6-i386
3)继续报错:
arm-linux-gcc -I./libxml_build/include/libxml2 -c -o protocol.o protocol.c
/usr/local/myarm/arm-linux-gcc-4.4.3/bin/../libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
make: *** [<内置>:protocol.o] 错误 1
通常是因为系统中缺少了 libstdc++.so.6 这个共享库,或者系统中的该库版本过低。
解决方法:安装所需的32位库文件。
在终端中执行以下命令sudo apt-get install lib32stdc++6:
#安装32位的 libstdc++6 库。
4)编译时继续报错:
安装其他相关的32位库,执行以下命令:
5)直到此时,Ubuntu20.04 64bit系统中安装交叉编译器才成功