“未定义的引用'战俘'”即使文件math.h和库链接-lm(“undefined r

2019-09-01 19:10发布

我使用的math.h-lm选项编译。 我已经尝试了所有的:

gcc -o ssf ssf_tb.c ssf.c -lm
gcc -o ssf ssf_tb.c -lm ssf.c   
gcc -o -lm ssf -lm ssf_tb.c ssf.c

但错误:

undefined reference to 'pow'  

发生在所有的情况下。

Answer 1:

-lm在该行的末尾。

GCC处理指定输入在它们出现在命令行上的顺序进行最后的程序的参数。 的-lm参数被传递给链接器,和ssf.c参数,例如,被编译,并且将所得的目标文件被传递给链接器。

所述接头也为了处理输入。 当它看到一个库, -lm指定,它会查看是否该库提供了链接当前需要的任何符号。 如果是这样,它复制从图书馆借这些符号的模块,并建立他们进入程序。 当链接器看到一个目标模块,它建立该对象模块到程序中。 把目标模块到程序后,连接不回去,看看它是否需要从早期库什么。

因为你首先列出库,链接器没有看到任何东西,它从库需要。 如果先列出对象模块,链接器将拿起对象模块到程序中。 在这样做的过程中,连接器将让所有的对象需要未定义符号列表。 然后,当链接器发现库,它会看到库这些符号提供定义,它会带来的模块,这些符号到程序中。



文章来源: “undefined reference to `pow'” even with math.h and the library link -lm
标签: c linux math gcc