我正在使用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指定的库时,它会查看该库是否提供了链接器当前所需的任何符号.如果是这样,它将使用库中的那些符号复制模块并将它们构建到程序中.当链接器看到对象模块时,它会将该对象模块构建到程序中.将对象模块引入程序后,链接器不会返回并查看它是否需要来自早期库的任何内容.
因为您首先列出了库,所以链接器没有从库中看到它所需的任何内容.如果首先列出目标模块,链接器将把对象模块带入程序.在执行此操作的过程中,链接器将列出对象所需的所有未定义符号.然后,当链接器看到库时,它将看到库提供这些符号的定义,并且它将带有这些符号的模块带入程序.
| 归档时间: |
|
| 查看次数: |
21465 次 |
| 最近记录: |