我使用的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'
发生在所有的情况下。
我使用的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'
发生在所有的情况下。
把-lm
在该行的末尾。
GCC处理指定输入在它们出现在命令行上的顺序进行最后的程序的参数。 的-lm
参数被传递给链接器,和ssf.c
参数,例如,被编译,并且将所得的目标文件被传递给链接器。
所述接头也为了处理输入。 当它看到一个库, -lm
指定,它会查看是否该库提供了链接当前需要的任何符号。 如果是这样,它复制从图书馆借这些符号的模块,并建立他们进入程序。 当链接器看到一个目标模块,它建立该对象模块到程序中。 把目标模块到程序后,连接不回去,看看它是否需要从早期库什么。
因为你首先列出库,链接器没有看到任何东西,它从库需要。 如果先列出对象模块,链接器将拿起对象模块到程序中。 在这样做的过程中,连接器将让所有的对象需要未定义符号列表。 然后,当链接器发现库,它会看到库这些符号提供定义,它会带来的模块,这些符号到程序中。