原文地址:http://blog.sina.com.cn/s/blog_87c063060101ativ.html
linker input file unusedbecause linking not done
GCC是Linux平台下常用的编译链接器。编译链接的过程分为:
源代码-->预处理文件(.i)-->编译后的汇编代码(.s)-->汇编后的二进制文件(.o)-->链接后的二进制物件(无后缀)。
处理程序分别是 :cpp、ccl、as、ld。
使用 -v选项,可以看到各个阶段关联的处理程序。
使用gcc -E 指示gcc对源代码进行预处理,结果直接输出到终端。
使用gcc -S 指示gcc编译成为汇编语言
使用gcc -c 指示gcc直至形成二进制文件(不进行链接)
使用gcc 指示gcc链接形成二进制物件(多个二进制模块链接形成大的模块或者可执行程序)
因此你需要的目标文件的种类是 -E、-S、-c或者不带这些参数确定的,
源文件可以是中间文件的一种。-o参数控制的仅仅是输出文件的名称。
但是gcc默认会根据源文件的后缀去判断应该调用处理程序的那些。例如源文件的后缀是.c,则gcc -E使用的是cpp,gcc-c则使用cpp、ccl、as。如果源文件的后缀是.o,则gcc -E 是无法进行的,会报错:linker input file unused because linking notdone。这是gcc发现这个应该进行链接,但是选项指示不使用linker程序,因而报这种错误信息。如果源文件是二进制的文件,但是保存的源文件后缀却是.c,则gcc会当作这是.c文件,如果采用gcc不带参数,则gcc会很多错,因为它把这个文件当作源代码处理的。
注意:这里,源文件指的是gcc的输入文件,源代码指的是程序源代码文件。