justinvisible 发表于 2012-10-08 07:53

关于gcc编译的一个问题,基友们看过来啊看过来!!!



假设程序名为calc.c,编译如下:
gcc -Wall calc.c -o calc
书上说这样编译会产生错误,应该要这样编译:
gcc -Wall calc.c -o calc -lm

但是:我在自己机器上试验的结果是 gcc -Wall calc.c -o calc 能编译出结果。
请问为什么?
P.S. gcc编译器不是默认只搜索标准C语言库,即libc.so或libc.a吗,不会搜索
libm.a,所以要加上 -lm 选项。

justinvisible 发表于 2012-10-08 07:55

我用的系统是RHEL6.0。

justinvisible 发表于 2012-10-08 08:39

等待高人指点一二 !!!:mrgreen:

MMMIX 发表于 2012-10-08 09:14

回复 1# justinvisible


    为了生成更好的代码,gcc 会做一些优化,其中之一就是把一些在编译期间能得到值的函数调用换成它的值,在这里就是 sqrt(2.0)。

_Rayx 发表于 2012-10-08 09:20

基友们……

justinvisible 发表于 2012-10-08 09:38

回复 4# MMMIX

把那个 2.0 换成变量,比如double m = 2.0,然后 sqrt(m); 就必须写 -lm 选项了,为什么?


   

justinvisible 发表于 2012-10-08 09:39

回复 5# _Rayx
好基友。


   

linux_c_py_php 发表于 2012-10-08 10:58

同样遇到过这个疑问, 没当回事.

MMMIX 发表于 2012-10-08 16:32

linux_c_py_php 发表于 2012-10-08 10:58 static/image/common/back.gif
同样遇到过这个疑问, 没当回事.

这种情况,写编译规则的时候还是把 -lm 加上,更保险,移植性更好。
页: [1]
查看完整版本: 关于gcc编译的一个问题,基友们看过来啊看过来!!!