Ubuntu 中gcc 编译简单c语言问题,我知道这个问题很肤浅,还望各位大侠帮忙

内核编译和嵌入式产品的设计与开发
回复
芳草萋萋
帖子: 4
注册时间: 2014-05-02 9:18
系统: Ubuntu 14.0

Ubuntu 中gcc 编译简单c语言问题,我知道这个问题很肤浅,还望各位大侠帮忙

#1

帖子 芳草萋萋 » 2014-05-02 10:25

前两天虚拟机刚装上Ubuntu 听说里面gcc是编译c/c++利器,闲来无事就写了几个简单程序,涉及到有数学运算函数,头文件也加了<math.h>编译时也没提找不到"math.h",但就是提示"sqrt()"函数未定义,看网上论坛说编译时j加上"-lm",也加了,但编译器还是一口咬定"sqrt()"函数未定义,但在fedora下加上"-lm"问题就解决了阿?为啥我的Ubuntu 14.04LTS不行,是俺没装好么?有图为证,我擦,真么上传图片阿,你们都是在linux下逛论坛还是Windows下,好不习惯!
附件
Frdora 20下编译成功
Frdora 20下编译成功
Ubuntu 14.04下不行
Ubuntu 14.04下不行
头像
xcjzhd
帖子: 203
注册时间: 2009-06-12 20:20
系统: The Great ArchLinux

Re: Ubuntu 中gcc 编译简单c语言问题,我知道这个问题很肤浅,还望各位大侠帮忙

#2

帖子 xcjzhd » 2014-05-02 10:42

去你的 /usr/lib 下面看看有没有libm 没有的话, 记得安装glibc.
负责解决各种UEFI问题
头像
lainme
论坛版主
帖子: 7805
注册时间: 2008-09-13 19:17
系统: Arch Linux (x86_64)
联系:

Re: Ubuntu 中gcc 编译简单c语言问题,我知道这个问题很肤浅,还望各位大侠帮忙

#3

帖子 lainme » 2014-05-02 10:45

有没有安装libc6-dev?或者直接装build-essentials
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

Re: Ubuntu 中gcc 编译简单c语言问题,我知道这个问题很肤浅,还望各位大侠帮忙

#4

帖子 cjxgm » 2014-05-02 14:09

调整下参数顺序,试着把 -lm 放最后面
[bash]gcc -o a a.c -lm[/bash]
如果还不行,试试分步操作:
[bash]gcc -c -o a.o a.c # 编译
gcc -o a a.o -lm # 链接[/bash]
上次由 cjxgm 在 2014-05-02 14:18,总共编辑 1 次。
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

Re: Ubuntu 中gcc 编译简单c语言问题,我知道这个问题很肤浅,还望各位大侠帮忙

#5

帖子 cjxgm » 2014-05-02 14:13

xcjzhd 写了:去你的 /usr/lib 下面看看有没有libm 没有的话, 记得安装glibc.
没有 -lm 的话,那错误应该是

代码: 全选

/usr/bin/ld: cannot find -lm
collect2: error: ld returned 1 exit status

更何况,有 -lc 会没有 -lm?
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
芳草萋萋
帖子: 4
注册时间: 2014-05-02 9:18
系统: Ubuntu 14.0

Re: Ubuntu 中gcc 编译简单c语言问题,我知道这个问题很肤浅,还望各位大侠帮忙

#6

帖子 芳草萋萋 » 2014-05-04 10:43

:em11 4楼的办法解决了,虽然不知为什么, 感谢大家的帮忙,/usr/lib 下面确实没有libm文件但有以libm开头的6个文件夹还有很多文件,build-essentials是装了最新版的.
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

Re: Ubuntu 中gcc 编译简单c语言问题,我知道这个问题很肤浅,还望各位大侠帮忙

#7

帖子 cjxgm » 2014-05-04 19:15

芳草萋萋 写了::em11 4楼的办法解决了,虽然不知为什么, 感谢大家的帮忙,/usr/lib 下面确实没有libm文件但有以libm开头的6个文件夹还有很多文件,build-essentials是装了最新版的.
错误原因是参数 -lm 没有传递到链接器,所以链接器以为你没有写 -lm,于是链接出错。
有些版本的 gcc 链接参数要放最后面才会传到链接器,这是个坑
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
回复