无法将程序与gcc -static链接

时间:2015-06-09 02:11:23

标签: c gcc

我正在尝试使用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

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

1 个答案:

答案 0 :(得分:2)

特别是,它意味着找不到C库的 static 版本,因为您正在使用-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。它们较小,通常可修改为静态链接。这可能涉及自己构建库。