我正在尝试使用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
这是什么意思,我该如何解决这个问题?
答案 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库,例如uclibc或musl。它们较小,通常可修改为静态链接。这可能也涉及自己构建库。