Loading

使用gcc的-l参数的时候,怎么查找函数所在库的位置

键盘输入一个整数n,接着输入n个实型数,分别求取这n个实型数的平方根。代码如下:

 

使用gcc编译,报错如下: 

 

原因是没有链接数学库,加上-lm即可,-l是链接,m是数学库(math.h)

 

 

那我们怎么知道sqrt在哪个库呢?

centos7下使用:

nm -Do /lib64/*.so|grep sqrt

结果为:

 

 /lib64/libm-2.17.so就是sqrt的动态链接库的位置,

 找到后,只要gcc的-l参数后面加上上图中lib后面的那个字母即可,libm-2.17.so中m表示库名,2.17是版本。所以gcc上加-lm进行链接

 Ubuntu64位使用:

nm -Do /lib/x86_64-linux-gnu/*.so|grep sqrt

因为Ubuntu的动态库是在 /lib/x86_64-linux-gnu 下,而centos是在 /lib64/下。

那一个陌生的linux怎么知道动态库在哪呢,数学库肯定叫libm,这时可以使用find命令对libm进行查找,这样就可以找到动态库的目录。

find / -name *libm*

 

 

说明当前系统的动态库.so在/usr/lib64/目录下,所以接下来要找函数在哪个库,只需要使用

 nm /lib64/*.so|grep 函数名 

即可。

/usr/lib64就是/lib64,因为/lib64是前者的链接文件(即快捷方式):

 

 

posted @ 2020-03-07 08:37  拾月凄辰  阅读(856)  评论(0编辑  收藏  举报