2016-07-14 9 views
1
私はGCCとUbuntuの上でコードもコンパイルしようとしています

をして、静的なバイナリを生成することができないと、私はこのスタンドアロン一つとして、コードを実行したいコンパイルです:はなぜGCC

$ gcc -static-libstdc++ main.c -o Server1 `mysql_config --cflags --libs` -lssl -lcrypto -lm -L /user-L/usr/lib/x86_64-linux-gnu 

次に出力idを検証すること私は、以下のコマンドを実行し、静的であるかどうか:

$ ldd Server1 

は、以下の出力につながる:

linux-vdso.so.1 => (0x00007ffce75e0000) 
    libmysqlclient.so.20 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 (0x00007fbd8662f000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbd86412000) 
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fbd86209000) 
    libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fbd85fa0000) 
    libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fbd85b45000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbd8577b000) 
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fbd85561000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbd8535d000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fbd84fda000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbd84cd1000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fbd84abb000) 
    /lib64/ld-linux-x86-64.so.2 (0x00005584efccf000) 
$ 

なぜ上記のlibがServer1 Binaryファイルに含まれていないのですか?

種類

+1

'-static'を渡してみましたか? – marcolz

+0

多くのありがとう!どうもありがとう! – user6588952

答えて

0

まず、 "g ++"でコードをコンパイルしようとします。

1

gccを使用してスタンドアロンプ​​ログラムをコンパイルするには、コンパイル時に-staticフラグを使用する必要があります。例えば

gcc -static -o a.out main.c -lm

あなたのケースでは、あなたは共有ライブラリへの実行可能ファイルをリンクしようとしています。目標に達するには、これらのライブラリの静的バージョンが必要です。そうしないと、ldは失敗します。

関連する問題