2012-03-02 15 views
2

GCCを使用して、Cコードを1つのモノリシック実行可能ファイル(このファイル内のすべての依存関係を含む)にコンパイルします。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年に戻ることです。 –

+0

libc.aはどこかにありますか? – hirschhornsalz

+0

さらに詳しい情報をお伝えしますか? –

答えて

3

それは-staticオプションなしでリンクだか見てlddコマンドを使用してみてください。私が持っている愚かなプログラムのために私が得ることはここにあります。

私は自動的にそれは持つべきではないにもかかわらず、私を驚かせたのlibcの共有バージョンを取得静的なしだから、
~$ 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 

。私はあなたが共有バージョンを持っているが静的ではないと想像しているので、1986年があなたのための年であると決めるならば、静的ライブラリをどこからでも取得する必要があります:-)。

gcc -print-search-dirsを実行して検索し、libc.aが見つからないことを確認してください。