我想使用GCC将C代码编译成一个单片可执行文件(包括此文件中的每个依赖项)。 通常我可以用这个命令编译代码:
gcc -o server ex-serv-x509.c -lgnutls
但是当我尝试用这个-static参数编译它时,我得到了这个错误:
[root@localhost test]# gcc -static -o server ex-serv-x509.c -lgnutls
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
[root@localhost test]#
我如何解决问题?
祝福
答案 0 :(得分:3)
尝试使用ldd
命令查看在没有-static
选项的情况下链接的内容。这就是我得到的一个愚蠢的程序。
~$ gcc so.o -lm -o so
~$ ldd so
linux-gate.so.1 => (0x00db7000)
libm.so.6 => /lib/libm.so.6 (0x00c7f000)
libc.so.6 => /lib/libc.so.6 (0x0037f000)
/lib/ld-linux.so.2 (0x002da000)
~$ gcc so.o -static -lm -o so
~$ ldd so
not a dynamic executable
因此,如果没有静态,我会自动获取libc的共享版本,即使它不应该让我感到惊讶。我想你有共享版本而不是静态版本,所以你需要从某个地方获取静态库,如果你已经确定1986年是你的年份: - )。
要确保您可以执行:gcc -print-search-dirs
并搜索它们并确保找不到libc.a。