ubuntu gcc错误:对'log'等函数未定义的引用
成都创新互联网站建设公司,提供成都网站设计、做网站,网页设计,建网站,PHP网站建设等专业做网站服务;可快速的进行网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,是专业的做网站团队,希望更多企业前来合作!
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));
}
直接命令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:~$
这个主要的原因是gcc
编译的时候,各个文件依赖顺序的问题。在gcc
编译的时候,如果文件a
依赖于文件b
,那么编译的时候必须把a
放前面,b
放后面。
注意2:sqrt()函数也是
CentOS6.5升级手动安装GCC4.8.2 http://www.linuxidc.com/Linux/2015-01/112595.htm
Ubuntu升级GCC版本 http://www.linuxidc.com/Linux/2016-11/136840.htm
CentOS7环境下在/离线安装GCC与GCC-C++ http://www.linuxidc.com/Linux/2017-03/142319.htm
Ubuntu 16.04 LTS 降级安装GCC 4.8 http://www.linuxidc.com/Linux/2017-03/142299.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-09/147168.htm
本文题目:Ubuntugcc错误:对'log'等函数未定义的引用
地址分享:http://www.gawzjz.com/qtweb2/news24/18474.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联