小编use*_*999的帖子

在编译和链接C代码时,为什么在某些情况下不需要-lm?

我这里有一个示例文件:

#include <stdio.h>
#include <math.h>

int main(){
  printf("%f\n", log(10));
}
Run Code Online (Sandbox Code Playgroud)

当我用gcc sample.c -o a它编译它时工作得很好.我可以运行它./a并产生2.302585预期的输出.

然而,当我的文件看起来像这样:

#include <stdio.h>
#include <math.h>

int main(){
  double a = 10;
  printf("%f\n", log(a));
}
Run Code Online (Sandbox Code Playgroud)

它没有编译gcc sample.c -o a.相反,我必须使用,gcc sample.c -o a -lm以便我可以明显地告诉它"链接数学"...这是我没有真正遵循的地方,为什么我不必在第一个例子中链接数学?它究竟是什么意思必须"链接数学"?自从我使用C编译器以来已经有一段时间了,所以如果这是一个糟糕的问题,请原谅我.

c macros gcc math.h compiler-optimization

9
推荐指数
2
解决办法
270
查看次数

标签 统计

c ×1

compiler-optimization ×1

gcc ×1

macros ×1

math.h ×1