C - 编译静态文件

时间:2012-03-02 19:27:40

标签: c build compilation shared-libraries

我想使用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]# 

我如何解决问题?

祝福

1 个答案:

答案 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。