错误原因主要是没有定义“sin”函数,或者说没有找到“sin”函数的实现,虽然我们在函数开头声明了数学函数库,但还是没有找到sin的实现,这时我们就需要指定sin函数的具体路径了。

在指定具体路径之前,我们当然需要知道这个所谓的具体路径在哪?

技巧:函数的查找方法如下:

[root@lyb root]#nm –o /lib/*.so|grep 函数名

可以通过“nm”命令查找我们想要找的函数,例如:sin函数,方法如下:

[root@lyb root]#nm –o /lib/*.so|grep sin

这时,查找(部分)结果如下:

……………………………………………………

/lib/libm-2.3.4.so:00008610 W sin

/lib/libm-2.3.4.so:00008610 t _sin

/lib/libm-2.3.4.so:000183e0 W sinl

/lib/libm-2.3.4.so:000183e0 t _sinl

……………………………………………………

在 /lib/libm-2.3.2.so:00008610 W sin 中,/lib是系统存放函数的默认位置,libm-2.3.2.so是包含sin函数的函数库名,其中,所有函数库的名都以“lib”开头,跟着的字母“m”是包含sin函数的函数库的真正的名子,“-2.3.2”是版本号,“.so”说明它的动态库。

在使用“ - l”参数时,通常的习惯是出去“lib”函数库头和后面的版本号,使用真名和参数“-l”连接,形成“- lm”。于是,我们需要在gcc找不到库时,可是使用“-l”直接给定库名,输入如下:

[root@lyb root]# gcc –o 1-6 1-6.c -lm

就可以正确编译了!

转自:http://blog.sina.com.cn/s/blog_643d3d780100jjqz.html

posted on 2015-09-13 16:46  wind_chaser  阅读(658)  评论(0编辑  收藏  举报