最近需要碰到到Linux下的设备使用,需要使用交叉编译器,故在此记录下碰到的问题,以作经验。
交叉编译器
梗概
交叉编译器听起来很玄乎,实则是类似于gcc的编译器,而且大多数情况下,其使用的命令也和gcc一致,语法一致,即你可以在gcc上编译的文件,在交叉编译器上也可以编译,这是用于编译运行在特定的设备上的程序的编译器,只不过不是在PC上。
安装
你得到的交叉编译器通常是一个压缩包,如果没有后缀名就在后面加上(.tar/.tar.gz),就可以打开压缩包,其编译的程序通常问arm-xxx-linux-gcc,在目录下的bin文件下,理应解压出来就可以在该目录下直接编译,但是在linux下你需要将该目录加入系统变量,否则其不视之为一个命令。
增加系统参数
方法一
我第一次测试的时候使用了简易而不持续的方法,只可以在这个终端下有效。1export PATH=/usr/local/webserver/mysql/bin:$PATH //将当前目录增加到PATH路径中1echo $PATH //打印PATH路径
如果看到如下界面就说明当前路径已经加入到PATH路径中。
/usr/local/webserver/mysql/bin:/usr/local/webserver/mysql/bin/:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
方法二1vim /etc/profile
在最后,添加:1export PATH="/usr/local/webserver/mysql/bin:$PATH"
保存,退出,然后运行:1source /etc/profile
不报错则成功。
Gcc多文件编译1gcc getop.c calcDemo.c -o output.out
静态库生成(.a文件)
编译c文件爱你,生成目标文件
使用gcc/arm-xxx-linux文件编译c文件,得到.o文件1gcc -c file1.c file2.c
这样就得到了file1.o file2.o文件
归档目标文件,生成静态库1ar crv libmylib.a file1.o file2.o
我们就得到了libmylib.a,这就是我们需要的静态库。
上述命令中 crv 是 ar的命令选项:c 如果需要生成新的库文件,不要警告
r 代替库中现有的文件或者插入新的文件
v 输出详细信息
通过 ar t libmylib.a 可以查看 libmylib.a 中包含的目标文件。
可以通过 ar –help 查看更多帮助。
注意:我们要生成的库的文件名必须形如 libxxx.a ,这样我们在链接这个库时,就可以用 -lxxx。
反过来讲,当我们告诉编译器 -lxxx时,编译器就会在指定的目录中搜索 libxxx.a 或是 libxxx.so
使用静态库文件1gcc test.c -L. -lmylib
将会生成a.out,通过 ./a.out 可以运行该程序。说明我们的静态库能正常工作。
上面的命令中 -L. 告诉 gcc 搜索链接库时包含当前路径, -lmylib 告诉 gcc 生成可执行程序时要链接 libmylib.a。