键盘输入一个整数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是前者的链接文件(即快捷方式):