gcc static静态编译选项提示错误修正(/usr/lib/ld: cannot find -lc)

本文详细介绍了如何解决gcc在静态编译C程序时出现的ld无法找到libc、lm、lgcc_s等库的错误。通过在系统中搜索并建立相应库的链接,可以有效解决问题,确保编译过程顺利进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用gcc静态编译C程序时显示出:
/usr/lib/ld: cannot find -lc
/usr/lib/ld: cannot find -lgcc_s
/usr/lib/ld: cannot find -lm
/usr/lib/ld: cannot find -lgcc_s

的错误。主要问题出在静态编译时需要链接静态库,将动态库编译到文件中,去掉此参数是没问题。

非静态编译时 ldd filename,显示如下,这是可执行程序所需要的动态库,运行可执行程序时需要如下动态库。

        linux-gate.so.1 =>  (0x009a3000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x008fd000)
        libc.so.6 => /lib/libc.so.6 (0x0077f000)
        /lib/ld-linux.so.2 (0x0075d000)
        libtinfo.so.5 => /lib/libtinfo.so.5 (0x05c46000)
        libdl.so.2 => /lib/libdl.so.2 (0x008f6000)

静态编译时需要将所有的.a库链接到可执行程序中,所以需要libc的静态库文件,使用此命令查看rpm -ql glibc-static提示没有库文件,到下面的地址

http://www.rpmfind.net/linux/rpm2html/search.php?query=libc.a&submit=Search+...

下载glibc-static文件,使用 rpm -iv filename.rpm安装即可,调用find / -name libc.a可以看到libc的静态库,或则利用yum install glibc-static安装。

   





*******以下为非静态编译时出错的处理流程:

解决/usr/lib/ld: cannot find -lc

1. 在系统中搜索 libc.so 文件。搜索出一个无效的链接,删除;还有一个 libc.so.6,在/lib下面。

2.建立链接: ln- sv /lib/libc.so.6 libc.so 或cp /lib/libc.so.6 /lib/libc.so


解决/usr/lib/ld: cannot find -lm
1. 在系统中搜索 libm.so 文件。搜索出一个 libm.so,在/usr/lib/i386-linux-gnu下面。
2. 进入usr/lib目录:cd /usr/lib
3.建立链接 :sudo ln -sv /usr/lib/i386-linux-gnu/libm.solibm.so


解决/usr/lib/ld: cannot find -lgcc_s:
1. 在系统中搜索 libgcc_s.so文件。同样在/usr/lib/i386-linux-gnu下面搜索到了libgcc_s.so.1。
2. 进入usr/lib目录:cd /usr/lib
3.建立链接 :sudo ln -sv /lib/i386-linux-gnu/libgcc_s.so.1libgcc_s.so

当某一个链接建立成功的时候,系统显示是类似这样的:
"libgcc_s.so" ->"/lib/i386-linux-gnu/libgcc_s.so.1"
/opt/android-ndk-r18b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --sysroot=/opt/android-ndk-r18b/sysroot -I/include -fPIC -c -o /tmp/ffconf.3S9556Zm/test.o /tmp/ffconf.3S9556Zm/test.c /opt/android-ndk-r18b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -L/lib -L/opt/android-ndk-r18b/sysroot/usr/lib -lmpp -lunwind --sysroot=/opt/android-ndk-r18b/sysroot -o /tmp/ffconf.3S9556Zm/test /tmp/ffconf.3S9556Zm/test.o /..//bin/ld: cannot find crt1.o: No such file or directory /..//bin/ld: cannot find crti.o: No such file or directory /..//bin/ld: cannot find crtbegin.o: No such file or directory /..//bin/ld: cannot find -lmpp /..//bin/ld: cannot find -lunwind /..//bin/ld: cannot find -lgcc /..//bin/ld: cannot find -lgcc_s /..//bin/ld: cannot find -lc /..//bin/ld: cannot find -lgcc /..//bin/ld: cannot find -lgcc_s /..//bin/ld: cannot find crtend.o: No such file or directory /..//bin/ld: cannot find crtn.o: No such file or directory clang: error: linker command failed with exit code 1 (use -v to see invocation) C compiler test failed.还是出现了问题,这是命令:./configure --target-os=android --arch=aarch64 --enable-cross-compile --cross-prefix=$TOOLCHAIN/bin/$TARGET$API- --sysroot=/opt/android-ndk-r18b/sysroot --cc=$TOOLCHAIN/bin/clang --cxx=$TOOLCHAIN/bin/clang++ --enable-rkmpp --enable-libdrm --extra-cflags="-I$MPP_ROOT/include -fPIC" --enable-shared --enable-version3 --disable-static --disable-doc --extra-ldflags="-L$MPP_ROOT/lib -L/opt/android-ndk-r18b/sysroot/usr/lib -lmpp -lunwind"
最新发布
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值