常用交叉编译工具整理(arm-linux-gcc)

本文详细介绍了ARM Linux环境下常用的交叉编译工具,包括arm-linux-gcc的编译、优化、链接和目录部分的使用,以及arm-linux-ld、arm-linux-objcopy、arm-linux-objdump、arm-linux-readelf和arm-linux-ar的功能和具体操作,帮助开发者理解和掌握交叉编译过程。
摘要由CSDN通过智能技术生成

一、arm-linux-gcc

  1. 编译部分:

   -o : 后面接的是输出文件名(arm-linux-gcc -o hello hello.c)            

   -v : 可以观看编译细节         (arm-linux-gcc -v -o hello hello.c)

   -c : 预编译,编译和汇编源文件,不做连接 [裸板程序一般先不做连接,最后一起做链接](arm-linux-gcc -o hello.o -c hello.c)

  -S : 编译后停止,不进行汇编(arm-linux-gcc -S -o hello.s hello.c)

  -E : 预编译后即顶着,不进行编译(arm-linux-gcc -E hello.c)

  -g  : 产生调试信息

  -Wall : 打开所有需要注意的警告信息

                  

  2. 优化部分

     (注可以指定多个"-O"选项,不管带不带数字,生效的是最后一个)

       -O or -O1 : 不使用-O/-O1时,可以减少编译的开销,使编译结果能够调试,语句是独立的,只有声明了register的变量才分配使用寄存器;

                         使用-O/-O1时,编译器试图减少目标码的大小和执行时间。

       -O2          : 多优化一些,除了涉及空间和速度交换的优化选项,执行几乎所有优化工作,例如不进行循环展开和函数内嵌;

       -O3          : 优化的更多,除了-O2, 还打开"-finline-functions"

       -O0          : 不作优化

                  

  3.  链接部分

       -llibrary_name  :  链接名为library的库文件,真正的名字为liblibrary.a,如要链接libtest.a or libtest.so ,则写成-ltest,如果有动态库,则会优先链接动态库。

       -Llibpath            : 指定链接库搜索路径,如库都放在/prj/libs/下面,则-L/prj/libs

      -nostartfiles         : 不连接系统标准启动文件,标准库文件仍然正常使用(编译bootloader,kernel时用到)

      -nostdlib             : 不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器(编译bootloader,kernel时用到)

                                   [与-nostartfiles的区别是,-nostartfiles只是不包含启动文件]

      -static                 : 在支持dynamic linking的系统上阻止连接共享库[默认情况下会优先选择连接动态库,使用了static会直接连接静态库] (gcc-static -o main main.c func.c)              

      -shared             :生成共享

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值