GCC 常用编译选项

1. unix 设置编译选项只链接调用的函数

1、GCC选项添加
COMPILE_FLAGS += -ffunction-sections -fdata-sections
2、LD选项添加
LDFLAGS += -Wl,-gc-sections


2.  ARM代码和Thumb代码之间相互调用,归纳如下。

       "-mthumb-interwork”的意义是:使用这个编译选项生成的目标文件,允许在ARM和Thumb之间交叉调用。但需要说明的是,加入这个选项之后,编译器生成的目标文件既可能是ARM的,也有可能是Thumb的,这个要根据其他的编译选项的情况而定。


       "-mthumb”的意义是:使用这个编译选项生成的目标文件是Thumb的,目前还没有发现GNU编译器中有哪一个选项可以指定生成的目标文件是thumb-2的。


       于是乎,一个自然而然的问题就是:"-mthumb-interwork -mthumb”编译选项生成的目标文件就是thumb的,但是可以被其他的ARM的目标文件交叉调用。


       举一下的例子(来源于网络)

[cpp]  view plain  copy
  1. //   
  2. // file: arm.c (instruction length: 32-bit)   
  3. //   
  4. extern int thumb_func( void );   
  5. int main( void )   
  6. {   
  7.     return( thumb_func() );   
  8. }   
  9. //   
  10. // file: thumb.c (instruction length: 16-bit)   
  11. //   
  12. int thumb_func( void )   
  13. {   
  14.      return( 0xdeadbeef );   
  15. }   
  16. //   
  17. // how to build:   
  18. //   
  19. arm-elf-gcc -mthumb-interwork -c arm.c -o arm.o   
  20. arm-elf-gcc -mthumb-interwork -mthumb -c thumb.c -o thumb.o   
  21. arm-elf-gcc -mthumb-interwork arm.o thumb.o -o a.out  

        简单说明一下。一般我们因为种种原因需要将工程中的一部分文件编译为ARM,一部分编译为Thumb时, 我们往往是将ARM的目标文件作为一个.o,Thumb的目标文件作为另一个.o。就像上面的例子中,将arm.c编译为arm.o,将thumb.c便以为thumb.o。只是在这两部分的编译选项中都加入"-mthumb-interwork”这样就可以在后面将这两部分合并为(实际上是链接为)一个可执行文件。


3.gcc的使用手册。

-w的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。

-Wall选项意思是编译后显示所有警告。

-W选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。

在编译一些项目的时候可以-W和-Wall选项一起使用。

举个例子:

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2.   
  3. void main()  
  4. {  
  5.         int a=1.0*4;  
  6.         return 0;  
  7. }  
直接编译

gcc -o test_w_wall testwwall.c


只显示这一个警告,下面使用-w选项。

gcc -w -o test_w_wall testwwall.c

不会显示任何警告,直接编译成功。

gcc -Wall -o test_w_wall testwwall.c


显示了所有的警告,比之前不使用任何选项多出了变量a未使用这个警告,也多出了main函数的返回值不是int型。

gcc -W -o test_w_wall testwwall.c


只显示了没有返回值的main函数不应该有return一个值这个警告。

gcc -W -Wall test_w_wall testwwall.c


比单独使用-W多出了变量为使用这个警告,比-Wall选项少了一个看起来重复的main函数返回值不是int这个警告。

之前看了一篇国外程序员写的博客,说编译时不使用-W -Wall选项的是stupid的,所以编译时还是尽量带上吧。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值