2012-03-02 146 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。