新聞中心
ubuntu gcc錯(cuò)誤:對(duì)'log'等函數(shù)未定義的引用

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,是專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
a.c
#include
#include
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:在函數(shù)‘print_logarithm’中: 3 a.c:(.text+0x97):對(duì)‘log’未定義的引用 4 collect2: error: ld returned 1 exit status
查了一下發(fā)現(xiàn):主要是C/C++編譯為obj文件的時(shí)候并不需要函數(shù)的具體實(shí)現(xiàn),只要有函數(shù)的原型即可。但是在鏈接為可執(zhí)行文件的時(shí)候就必須要具體的實(shí)現(xiàn)了。驗(yàn)證如下:
1 linuxidc.com@linuxidc:~$ gcc -Wall -c a.c 2 linuxidc.com@linuxidc:~$ gcc -Wall -o a a.o 3 a.o:在函數(shù)‘print_logarithm’中: 4 a.c:(.text+0x97):對(duì)‘log’未定義的引用 5 collect2: error: ld returned 1 exit status 6 linuxidc.com@linuxidc:~$
編譯時(shí)沒(méi)有問(wèn)題,鏈接生成可執(zhí)行文件時(shí)報(bào)錯(cuò)。接下來(lái)加上-lm。 鏈接成功,如下:
1 linuxidc.com@linuxidc:~$ gcc -Wall -o a a.o -lm 2 linuxidc.com@linuxidc:~$
這個(gè)主要的原因是gcc編譯的時(shí)候,各個(gè)文件依賴(lài)順序的問(wèn)題。在gcc編譯的時(shí)候,如果文件a依賴(lài)于文件b,那么編譯的時(shí)候必須把a放前面,b放后面。
注意2:sqrt()函數(shù)也是
CentOS6.5升級(jí)手動(dòng)安裝GCC4.8.2 http://www.linuxidc.com/Linux/2015-01/112595.htm
Ubuntu升級(jí)GCC版本 http://www.linuxidc.com/Linux/2016-11/136840.htm
CentOS7環(huán)境下在/離線(xiàn)安裝GCC與GCC-C++ http://www.linuxidc.com/Linux/2017-03/142319.htm
Ubuntu 16.04 LTS 降級(jí)安裝GCC 4.8 http://www.linuxidc.com/Linux/2017-03/142299.htm
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2017-09/147168.htm
當(dāng)前名稱(chēng):Ubuntugcc錯(cuò)誤:對(duì)'log'等函數(shù)未定義的引用
新聞來(lái)源:http://fisionsoft.com.cn/article/coeidgc.html


咨詢(xún)
建站咨詢(xún)
