将放在
-lm行尾。
gcc按照在命令行上出现的顺序处理为最终程序指定输入的参数。该
-lm参数被传递给链接器和
ssf.c参数,例如,被编译,并且将所得的目标文件被传递给链接器。
链接器还按顺序处理输入。当看到
-lm指定的库时,它会查看该库是否提供 了链接器当前需要的
任何符号。如果是这样,它将从库中复制带有这些符号的模块,并将其构建到程序中。当链接器看到一个对象模块时,它将该对象模块构建到程序中。将对象模块引入程序后,链接器不会返回并查看它是否需要早期库中的任何内容。
因为您首先列出了库,所以链接器看不到库中需要的任何内容。如果首先列出目标模块,则链接器会将目标模块带入程序。在此过程中,链接器将列出对象需要的所有未定义符号的列表。然后,当链接程序看到该库时,它将看到该库提供了这些符号的定义,并将带有这些符号的模块带入程序。



