
可重定位目标文件:这种文件包含二进制代码和数据,这些代码和数据已经转换成了机器指令代码和数据。但是这种可重定位的目标文件还不可以直接执行,原因是这些指令和数据中往往引用其他模块(目标文件)中的符号。这些其他模块的符号对于本模块来说是未知的。这些符号的解析需要链接器将所有的模块进行链接。这种 *** 作成为“重定位”,因此这种目标文件成为“可重定位的目标文件”的后缀名通常是.o。
可执行目标文件:这种文件同样包含二进制代码和数据。所不同的是,这种文件已经经过了链接 *** 作,和所有的模块(目标文件)都产生了联系。链接器将所有需要的可重定位目标文件链接成为一个可执行目标文件。这时,每个目标文件中引用其他目标文件中的符号都已经得到了解析和重定位。因此每个符号都是已知的了,该文件可以被机器直接执行。
共享目标文件:这是一种特殊类型的可定位目标文件,可以在需要它的程序运行或者加载时,动态地加载到内存中运行。这种文件的后缀名通常是.so。共享目标文件又称为“动态库”文件或者“共享库”文件。
如果你不指定编译成什么文件,gcc默认一步到位,直接生成可执行文件你可以试试以下几个参数
-c
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
例子用法:
gcc -c hello.c
他将生成.o的obj文件
-S
只激活预处理和编译,就是指把文件编译成为汇编代码。
例子用法
gcc -S hello.c
他将生成.s的汇编代码,你可以用文本编辑器察看
-E
只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.
例子用法:
gcc -E hello.c >pianoapan.txt
gcc -E hello.c | more
-o
制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,
例子用法
gcc -o hello.exe hello.c (哦,windows用习惯了)
gcc -o hello.asm -S hello.c
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)