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

Posted fengzeng666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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是前者的链接文件(即快捷方式):

 技术图片

 

以上是关于使用gcc的-l参数的时候,怎么查找函数所在库的位置的主要内容,如果未能解决你的问题,请参考以下文章

gcc编译文件时找不到指定函数怎么办

gcc常用的参数说明

静态库与动态库

gcc常用的参数说明

GCC中 -I-L-l 选项的作用

linux找动态链接库默认位置,linux动态链接库的加载顺序,编译时找静态库默认位置,找动态库,找静态库