关于makefile报错:linker input file unused because linking not done

原文地址: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的输入文件,源代码指的是程序源代码文件。


你可能感兴趣的:(Makefile)