2012-03-02 94 views
2

我想使用GCC将C代码编译为一个单片可执行文件(包括此文件中的每个依赖项)。 通常我可以用这个命令编译代码:C - 编译静态文件

gcc -o server ex-serv-x509.c -lgnutls 

但当我尝试这个-static参数编译它,我得到这个错误:

[[email protected] test]# gcc -static -o server ex-serv-x509.c -lgnutls 
/usr/bin/ld: cannot find -lc 
collect2: ld returned 1 exit status 
[[email protected] test]# 

我怎样才能解决这个问题?

+5

构建静态可执行文件的最佳方式涉及到时间回溯到1986. – 2012-03-02 19:33:10

+0

您是否有libc.a某处? – hirschhornsalz 2012-03-02 19:34:12

+0

你会提供更多的信息吗? – 2012-03-02 19:34:17

回答

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。