现在的位置: 首页 > 综合 > 正文

【GCC】参数顺序导致的“undefined reference”问题

2013年09月08日 ⁄ 综合 ⁄ 共 928字 ⁄ 字号 评论关闭

上学的时候接触了gcc和makefile,但直到真正实习的时候开始使用,才发现自己学的真是搓啊……

言归正传,今天遇到一个问题,编译遇到一大串的“undefined reference”,命令如下:

 

后来经过摸索,发现如下命令可以编译成功:

但不明白其所以然。百度后发现原因(参见:http://hi.baidu.com/thinkingdeeply/blog/item/990035d18ecad0d0562c8468.html):

对于C/C++编译而言,读取编译选项是按照从左到右的顺序执行的(注1) 。那么当编译器遇到源文件的时候,就开始对源文件中用到的函数进行解析,找到相对应的函数的函数体或者说是实现(Definition of Function)。这个过程是按照先遇到不能解析的函数(unresolved function),然后在源文件选项后面的一些选项中寻找可能的函数体的信息,是这样的一个顺序进行的。那么我们可以发现对于Makefile A,由于包含函数体或者函数定义信息的编译选项出现在源文件之前,那么当编译器在源文件中遇到不能解析的函数时,在源文件之后的选项中寻找相关的信息,那么就出现了编译错误,也就是无法找到相关的函数定义。

因此上述两句命令的关键不同在于“triple_unittest.o”的位置是否在“-lgtest”之前,其它神马都是浮云。

PS:感冒真是难受啊!带病工作中ZZ~

抱歉!评论已关闭.