鱼C论坛

 找回密码
 立即注册
查看: 2749|回复: 0

编译报错无法识别pow、sqrt函数

[复制链接]
发表于 2021-3-3 14:36:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 baofu007 于 2021-3-3 14:41 编辑

源文件中#include <math.h>,然后调用了pow或者其他math函数,编译时加了-lm还是报错,这可能是因为libm和libc两个库的版本不一致。



报错信息如下:

  1. (base) root@ubuntu:/home/yongjie/learning/c/s1e15# gcc exer2.c -lm -o exer2
  2. /lib/x86_64-linux-gnu/libm.so.6: undefined reference to `__strtof128_nan@GLIBC_PRIVATE'
  3. collect2: error: ld returned 1 exit status
复制代码



比如上面这个报错是/lib/x86_64-linux-gnu/libm.so.6库报的错,可以查看这个库的版本

  1. (base) root@ubuntu:/home/yongjie/learning/c/s1e15# ll /lib/x86_64-linux-gnu/libm.so.6
  2. lrwxrwxrwx 1 root root 12 Dec 30 03:28 /lib/x86_64-linux-gnu/libm.so.6 -> libm-2.27.so
复制代码


再查看libc库的版本
  1. (base) root@ubuntu:/home/yongjie/learning/c/s1e15# ll /lib/x86_64-linux-gnu/libc*
  2. -rwxr-xr-x 1 root root 1868984 Jun  5  2020 /lib/x86_64-linux-gnu/libc-2.23.so
  3. lrwxrwxrwx 1 root root      14 May 21  2020 /lib/x86_64-linux-gnu/libcap.so.2 -> libcap.so.2.24
  4. -rw-r--r-- 1 root root   23128 Oct 23  2015 /lib/x86_64-linux-gnu/libcap.so.2.24
  5. -rw-r--r-- 1 root root  190856 Jun  5  2020 /lib/x86_64-linux-gnu/libcidn-2.23.so
  6. lrwxrwxrwx 1 root root      15 Jun  5  2020 /lib/x86_64-linux-gnu/libcidn.so.1 -> libcidn-2.23.so
  7. lrwxrwxrwx 1 root root      17 Jan 22  2020 /lib/x86_64-linux-gnu/libcom_err.so.2 -> libcom_err.so.2.1
  8. -rw-r--r-- 1 root root   14648 Jan 22  2020 /lib/x86_64-linux-gnu/libcom_err.so.2.1
  9. -rw-r--r-- 1 root root   39224 Jun  5  2020 /lib/x86_64-linux-gnu/libcrypt-2.23.so
  10. -rw-r--r-- 1 root root 2365984 Sep 15 15:30 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
  11. lrwxrwxrwx 1 root root      22 Sep  6  2017 /lib/x86_64-linux-gnu/libcryptsetup.so.4 -> libcryptsetup.so.4.6.0
  12. -rw-r--r-- 1 root root  158920 Sep  6  2017 /lib/x86_64-linux-gnu/libcryptsetup.so.4.6.0
  13. lrwxrwxrwx 1 root root      16 Jun  5  2020 /lib/x86_64-linux-gnu/libcrypt.so.1 -> libcrypt-2.23.so
  14. lrwxrwxrwx 1 root root      12 Jun  5  2020 /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.23.so
复制代码


发现libm.so.6连接的libm是2.27版本,libc.so.6连接的libc是2.23版本,版本不一致,可以将libm改为引用2.23版本

1、可以看到有一个libm-2.23.so库存在
  1. (base) root@ubuntu:/home/yongjie/learning/c/s1e15# ll /lib/x86_64-linux-gnu/libm*
  2. -rw-r--r-- 1 root root 1088952 Jun  5  2020 /lib/x86_64-linux-gnu/libm-2.23.so
  3. -rw-r--r-- 1 root root 1700792 Oct 26 09:25 /lib/x86_64-linux-gnu/libm-2.27.so
  4. -rw-r--r-- 1 root root   18776 Jun  5  2020 /lib/x86_64-linux-gnu/libmemusage.so
  5. lrwxrwxrwx 1 root root      15 May 21  2020 /lib/x86_64-linux-gnu/libmnl.so.0 -> libmnl.so.0.1.0
  6. -rw-r--r-- 1 root root   22520 Aug 28  2014 /lib/x86_64-linux-gnu/libmnl.so.0.1.0
  7. lrwxrwxrwx 1 root root      17 Jan 27  2020 /lib/x86_64-linux-gnu/libmount.so.1 -> libmount.so.1.1.0
  8. -rw-r--r-- 1 root root  286824 Jan 27  2020 /lib/x86_64-linux-gnu/libmount.so.1.1.0
  9. lrwxrwxrwx 1 root root      12 Dec 30 03:28 /lib/x86_64-linux-gnu/libm.so.6 -> libm-2.27.so
  10. -rw-r--r-- 1 root root  166368 Jun  5  2020 /lib/x86_64-linux-gnu/libmvec-2.23.so
  11. lrwxrwxrwx 1 root root      15 Jun  5  2020 /lib/x86_64-linux-gnu/libmvec.so.1 -> libmvec-2.23.so
复制代码


2、只需要把libm.so.6连接到libm-2.23.so就可以
  1. (base) root@ubuntu:/home/yongjie/learning/c/s1e15# cd /lib/x86_64-linux-gnu
  2. (base) root@ubuntu:/lib/x86_64-linux-gnu# rm -rf libm.so.6
  3. (base) root@ubuntu:/lib/x86_64-linux-gnu# ln -s libm-2.23.so libm.so.6
复制代码


3、查看一下是否连接成功,如下连接成功libm.so.6 -> libm-2.23.so
  1. (base) root@ubuntu:/lib/x86_64-linux-gnu# ll /lib/x86_64-linux-gnu/libm*
  2. -rw-r--r-- 1 root root 1088952 Jun  5  2020 /lib/x86_64-linux-gnu/libm-2.23.so
  3. -rw-r--r-- 1 root root 1700792 Oct 26 09:25 /lib/x86_64-linux-gnu/libm-2.27.so
  4. -rw-r--r-- 1 root root   18776 Jun  5  2020 /lib/x86_64-linux-gnu/libmemusage.so
  5. lrwxrwxrwx 1 root root      15 May 21  2020 /lib/x86_64-linux-gnu/libmnl.so.0 -> libmnl.so.0.1.0
  6. -rw-r--r-- 1 root root   22520 Aug 28  2014 /lib/x86_64-linux-gnu/libmnl.so.0.1.0
  7. lrwxrwxrwx 1 root root      17 Jan 27  2020 /lib/x86_64-linux-gnu/libmount.so.1 -> libmount.so.1.1.0
  8. -rw-r--r-- 1 root root  286824 Jan 27  2020 /lib/x86_64-linux-gnu/libmount.so.1.1.0
  9. lrwxrwxrwx 1 root root      12 Mar  3 01:22 /lib/x86_64-linux-gnu/libm.so.6 -> libm-2.23.so
  10. -rw-r--r-- 1 root root  166368 Jun  5  2020 /lib/x86_64-linux-gnu/libmvec-2.23.so
  11. lrwxrwxrwx 1 root root      15 Jun  5  2020 /lib/x86_64-linux-gnu/libmvec.so.1 -> libmvec-2.23.so
复制代码


4、问题解决
  1. (base) root@ubuntu:/home/yongjie/learning/c/s1e15# gcc exer2.c -lm -o exer2
  2. (base) root@ubuntu:/home/yongjie/learning/c/s1e15# ./exer2
  3. Number: 1229
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 18:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表