"未定义引用`pow'",即使是math.h和库链接-lm

use*_*169 10 c linux math gcc

我正在使用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
Run Code Online (Sandbox Code Playgroud)

但错误:

undefined reference to 'pow'  
Run Code Online (Sandbox Code Playgroud)

在所有情况下都会发生

Eri*_*hil 28

把它-lm放在最后.

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

链接器还按顺序处理输入.当它看到-lm指定的库时,它会查看该库是否提供了链接器当前所需的任何符号.如果是这样,它将使用库中的那些符号复制模块并将它们构建到程序中.当链接器看到对象模块时,它会将该对象模块构建到程序中.将对象模块引入程序后,链接器不会返回并查看它是否需要来自早期库的任何内容.

因为您首先列出了库,所以链接器没有从库中看到它所需的任何内容.如果首先列出目标模块,链接器将把对象模块带入程序.在执行此操作的过程中,链接器将列出对象所需的所有未定义符号.然后,当链接器看到库时,它将看到库提供这些符号的定义,并且它将带有这些符号的模块带入程序.