我這裏有一個樣本文件:爲什麼在編譯和鏈接C代碼時-lm在某些情況下不是必需的?
#include <stdio.h>
#include <math.h>
int main(){
printf("%f\n", log(10));
}
當我與gcc sample.c -o a
編譯它工作得很好。我可以用./a
來運行它,它會像預期的那樣生成輸出2.302585
。
然而,當我的文件看起來像這樣:
#include <stdio.h>
#include <math.h>
int main(){
double a = 10;
printf("%f\n", log(a));
}
它不gcc sample.c -o a
編譯。相反,我必須使用gcc sample.c -o a -lm
,這樣我才能明顯地告訴它「連接數學」......這就是我沒有真正遵循的地方,爲什麼我不必在第一個示例中將數學關聯起來呢?究竟什麼是「連接數學」呢?我已經和C編譯器合作過了一段時間,所以如果這是一個很差的問題,請原諒我。