赞
踩
1. unix 设置编译选项只链接调用的函数
2. ARM代码和Thumb代码之间相互调用,归纳如下。
"-mthumb-interwork”的意义是:使用这个编译选项生成的目标文件,允许在ARM和Thumb之间交叉调用。但需要说明的是,加入这个选项之后,编译器生成的目标文件既可能是ARM的,也有可能是Thumb的,这个要根据其他的编译选项的情况而定。
"-mthumb”的意义是:使用这个编译选项生成的目标文件是Thumb的,目前还没有发现GNU编译器中有哪一个选项可以指定生成的目标文件是thumb-2的。
于是乎,一个自然而然的问题就是:"-mthumb-interwork -mthumb”编译选项生成的目标文件就是thumb的,但是可以被其他的ARM的目标文件交叉调用。
举一下的例子(来源于网络)
简单说明一下。一般我们因为种种原因需要将工程中的一部分文件编译为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选项一起使用。
举个例子:
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的,所以编译时还是尽量带上吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。