鱼C论坛

 找回密码
 立即注册
查看: 3758|回复: 10

[已解决]Debian 10.4 无法 加载 math 库

[复制链接]
发表于 2020-7-23 09:09:08 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 rt3 于 2020-7-23 09:20 编辑

root@debian:/home/mxf/im/im1/src2/C/2# gcc main.c -lmath -o main.run
/usr/bin/ld: cannot find -lmath
collect2: error: ld returned 1 exit status

root@debian:/home/mxf/im/im1/src2/C/2# gcc main.c -L/usr/lib64 -o main.run
/usr/bin/ld: /tmp/ccOr1LF7.o: in function `prime_number':
main.c:(.text+0xdf): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status

root@debian:/home/mxf/im/im1/src2/C/2# gcc main.c -L/usr/lib -o main.run
/usr/bin/ld: /tmp/cc14U11e.o: in function `prime_number':
main.c:(.text+0xdf): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status

root@debian:/home/mxf/im/im1/src2/C/2# gcc main.c -L/usr/lib32 -o main.run
/usr/bin/ld: skipping incompatible /usr/lib32/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/ld: skipping incompatible /usr/lib32/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib32/libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib32/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/ld: /tmp/ccLQtNcx.o: in function `prime_number':
main.c:(.text+0xdf): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status

root@debian:/home/mxf/im/im1/src2/C/2# gcc main.c -L/usr/libx32 -o main.run
/usr/bin/ld: skipping incompatible /usr/libx32/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/ld: skipping incompatible /usr/libx32/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/libx32/libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/libx32/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/ld: /tmp/ccaFK2hG.o: in function `prime_number':
main.c:(.text+0xdf): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status

root@debian:/home/mxf/im/im1/src2/C/2# echo $LD_LIBRARY_PATH
/usr/local/lib:/usr/lib:/usr/lib32:/usr/libx32:/usr/lib64

root@debian:/# gcc -lmath --verbose
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 8.3.0 (Debian 8.3.0-6)
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/8/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/8/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccpoNCDq.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/8 -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. -lmath -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o
/usr/bin/ld: cannot find -lmath
collect2: error: ld returned 1 exit status


修改 LD_LIBRARY_PATH 变量 后 已运行 ldconfig

经验证 系统已安装 /usr/include/math.h

谢谢
最佳答案
2020-7-23 09:09:09

-lmath 改成 -lm

最佳答案

查看完整内容

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

使用道具 举报

发表于 2020-7-23 09:09:09 | 显示全部楼层    本楼为最佳答案   

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

使用道具 举报

发表于 2020-7-23 09:35:05 | 显示全部楼层
  1. ldconfig -p | grep math
复制代码


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

使用道具 举报

 楼主| 发表于 2020-7-23 14:07:30 | 显示全部楼层


libtommath.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libtommath.so.1
libtommath.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libtommath.so
libquadmath.so.0 (libc6,x32) => /libx32/libquadmath.so.0
libquadmath.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libquadmath.so.0
libquadmath.so.0 (libc6) => /lib32/libquadmath.so.0
libgimpmath-2.0.so.0 (libc6,x86-64) => /lib/libgimpmath-2.0.so.0
libImath-2_2.so.23 (libc6,x86-64) => /lib/x86_64-linux-gnu/libImath-2_2.so.23
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 14:37:54 | 显示全部楼层
rt3 发表于 2020-7-23 14:07
libtommath.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libtommath.so.1
libtommath.so (libc6,x8 ...

想到一个问题,你用了什么函数,需要 -lmath
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-23 18:13:10 | 显示全部楼层
赚小钱 发表于 2020-7-23 14:37
想到一个问题,你用了什么函数,需要 -lmath

用到了 sqrt(),源代码如下
  1. // 随意输入一个正整数,求其之前的数质数的个数

  2. #include <stdio.h>
  3. #include <math.h>
  4. int prime_number(int x);

  5. int main()

  6. {
  7.     int total = 2;
  8.         int temp = 0;
  9.         int m = 0;                                    // 输入的整数
  10.         int i;                                             // 循环次数
  11.         printf("输入一个整数:");
  12.         scanf("%d",&m);
  13.         printf("2 是素数\n");
  14.         printf("3 是素数\n");
  15.         for(i = 2;i <= m;i++)
  16.        {
  17.                 temp = prime_number(i);

  18.                 if(temp == 1)
  19.                 {
  20.                         printf("%d 是素数\n", i);
  21.                         total++;
  22.                 }
  23.         }
  24.         printf("%d 以内有 %d 个素数\n",m,total);
  25.       
  26.     return 0;

  27. }


  28. int prime_number(int i)

  29. {

  30.         int j;
  31.         int n = 0;
  32.         int temp = 0;
  33.         int k;                                                  // i 的平方根
  34.         k = (int)sqrt( (double)i );                    // 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换i的类型
  35.         for(j = 2;j <= k;j++)
  36.     {
  37.                 if(i%j == 0)                               // 问题在此处 ! i  为 9、15、25、27、33、35、39、45、49时,为什么能跳过 n++ ?         
  38.                 {
  39.                          n++;
  40.                 }

  41.                 if(n == 0)
  42.                 {
  43.                         temp = 1;
  44.                 }
  45.         }
  46.                         return temp;
  47. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 18:46:51 | 显示全部楼层
rt3 发表于 2020-7-23 18:13
用到了 sqrt(),源代码如下

我使用  sqrt 函数的时候,不需要链接 math,你把 -lmath 删掉编译试一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-23 18:54:27 | 显示全部楼层
赚小钱 发表于 2020-7-23 18:46
我使用  sqrt 函数的时候,不需要链接 math,你把 -lmath 删掉编译试一下

还是报错
  1. /usr/bin/ld: /tmp/ccImlklB.o: in function `prime_number':
  2. main.c:(.text+0xdf): undefined reference to `sqrt'
  3. collect2: error: ld returned 1 exit status
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-23 19:13:54 | 显示全部楼层
赚小钱 发表于 2020-7-23 18:46
我使用  sqrt 函数的时候,不需要链接 math,你把 -lmath 删掉编译试一下


你的 LD_LIBRARY_PATH 变量值是什么? 发行版的代号和版本呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 20:06:17 | 显示全部楼层
rt3 发表于 2020-7-23 19:13
你的 LD_LIBRARY_PATH 变量值是什么? 发行版的代号和版本呢?

LD_LIBRARY_PATH 是空的

  1. $ cat /etc/os-release
  2. NAME="Arch Linux"
  3. PRETTY_NAME="Arch Linux"
  4. ID=arch
  5. BUILD_ID=rolling
  6. ANSI_COLOR="38;2;23;147;209"
  7. HOME_URL="https://www.archlinux.org/"
  8. DOCUMENTATION_URL="https://wiki.archlinux.org/"
  9. SUPPORT_URL="https://bbs.archlinux.org/"
  10. BUG_REPORT_URL="https://bugs.archlinux.org/"
  11. LOGO=archlinux
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-23 20:09:06 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-11 10:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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