【问题标题】:Failure to link a program with gcc -static无法使用 gcc -static 链接程序
【发布时间】:2015-08-23 16:11:37
【问题描述】:

我正在尝试用 gcc 编译和链接以下代码:

#include <stdlib.h>

main()
{
    exit(0);
}

我正在使用gcc -static -o exit exit.c

我收到以下错误:

/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status

这是什么意思,我该如何解决?

【问题讨论】:

  • 表示找不到标准C库libc。为什么?我不知道。

标签: c gcc


【解决方案1】:

特别是,这意味着它找不到static 版本的C 库,因为您正在使用-static 进行编译。这意味着它不能使用标准共享库,通常类似于/lib/libc.so

为了支持构建静态二进制文件,您需要安装适当的静态库 (libc.a),它可能会或可能不会以预打包格式提供给您的发行版。在 Fedora 下,这可以作为 glibc-static 包使用:

yum install glibc-static

安装此软件包后,我可以毫无问题地从您的示例代码构建静态二进制文件:

$ gcc -static -o exit exit.c
$ file exit
exit: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux),
statically linked, for GNU/Linux 2.6.32,
BuildID[sha1]=12c642ecc01622c623c2efa5efa7e23d73889808, not stripped

其他解决方案包括自己构建静态 C 库,或使用为嵌入而设计的较小 C 库,例如 uclibcmusl。这些更小,通常更适合静态链接。这可能涉及自己构建库。

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 2013-03-16
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多