2021-05-12 14:32:11
Ubuntu gcc錯誤:對'log'等函數未定義的參照
2020-06-16 17:06:43
Ubuntu gcc錯誤:對'log'等函數未定義的參照
a.c
#include <stdio.h>
#include <math.h>
int main()
{
float a;
void print_logarithm(double);
printf("enter a num:");
scanf("%f",&a);
print_logarithm(a);
return 0;
}
void print_logarithm(double x)
{
if(x<=0.0)
{
printf("Positive numbers only,please.n");
return;
}
printf("The log of x is %f",log(x));
}
Ubuntu gcc編譯
直接命令gcc -Wall a.c
1 linuxidc.com@linuxidc:~$ gcc -Wall a.c 2 /tmp/ccmKjOLq.o:在函數‘print_logarithm’中: 3 a.c:(.text+0x97):對‘log’未定義的參照 4 collect2: error: ld returned 1 exit status
查了一下發現:主要是C/C++編譯為obj
檔案的時候並不需要函數的具體實現,只要有函數的原型即可。但是在連結為可執行檔案的時候就必須要具體的實現了。驗證如下:
1 linuxidc.com@linuxidc:~$ gcc -Wall -c a.c 2 linuxidc.com@linuxidc:~$ gcc -Wall -o a a.o 3 a.o:在函數‘print_logarithm’中: 4 a.c:(.text+0x97):對‘log’未定義的參照 5 collect2: error: ld returned 1 exit status 6 linuxidc.com@linuxidc:~$
編譯時沒有問題,連結生成可執行檔案時報錯。接下來加上-lm。 連結成功,如下:
1 linuxidc.com@linuxidc:~$ gcc -Wall -o a a.o -lm 2 linuxidc.com@linuxidc:~$
相關文章