如何解决此错误“找不到-lc”?

时间:2020-07-06 13:33:07

标签: c linux gcc centos redhat

如何在CentOS 7中编译此代码?我正在读一本书,在本书中他们在编译时使用-static ,这就是我的做法,并且遇到下面提到的错误,但是当我不使用-static时我没有错误,并且编译成功

首次尝试:

main()
{
        exit(0);
}

当我尝试编译它时出现此错误。

$ gcc -static -o exit exit.c
exit.c: In function _main_:
exit.c:3:9: warning: incompatible implicit declaration of built-in function _exit_ [enabled by default]
         exit(0);
         ^
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status

第二次尝试:

然后我用Google搜索这个错误,很多文章告诉我包括stdlib.h库,所以我也这样做了,我得到了这个错误: 代码:

#include <stdlib.h>
main()
{
        exit(0);
}

现在,当我编译它时,出现以下错误。

$ gcc -static -o exit exit.c 
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status

Linux版本:

$ uname -a
Linux localhost.localdomain 3.10.0-1127.13.1.el7.centos.plus.i686 #1 SMP Thu Jun 25 16:59:06 UTC 2020 i686 i686 i386 GNU/Linux

1 个答案:

答案 0 :(得分:0)

正如@KamilCuk指出的那样,这需要使用一组不同的库来进行静态链接,并且在我的CentOS 7机器上,这将安装适当的库:

# yum install glibc-static

然后编译应该可以按预期工作。

此软件包安装的库为:

$ rpm -q -l glibc-static
/usr/lib64/libBrokenLocale.a
/usr/lib64/libanl.a
/usr/lib64/libc.a
/usr/lib64/libc_stubs.a
/usr/lib64/libcrypt.a
/usr/lib64/libdl.a
/usr/lib64/libm.a
/usr/lib64/libnsl.a
/usr/lib64/libpthread.a
/usr/lib64/libresolv.a
/usr/lib64/librt.a
/usr/lib64/libutil.a