我正在使用math.h和-lm编译选项。我已经尝试了所有:
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参数,例如,被编译,并且将所得的目标文件被传递给链接器。
ssf.c
链接器还按顺序处理输入。当看到-lm指定的库时,它会查看该库是否提供 了链接器当前需要的 任何符号。如果是这样,它将从库中复制带有这些符号的模块,并将其构建到程序中。当链接器看到一个对象模块时,它将该对象模块构建到程序中。将对象模块引入程序后,链接器不会返回并查看它是否需要早期库中的任何内容。
因为您首先列出了库,所以链接器看不到库中需要的任何内容。如果首先列出目标模块,则链接器会将目标模块带入程序。在此过程中,链接器将列出对象需要的所有未定义符号的列表。然后,当链接程序看到该库时,它将看到该库提供了这些符号的定义,并将带有这些符号的模块带入程序。