2016-06-15 17 views
0

私はできるだけ多くの情報をlddから隠したいので、動的にリンクする代わりに静的にリンクする方法を学習しています。私は、正しい構文がg ++は共有オブジェクトの静的バージョンをリンクできません

g++ -ldynamiclib -o exe files.cpp staticlib.a 

であることを別のStackOverflowのポストから読んだこのように、私の現在のコンパイルコードは次のようになります。

STATIC_LIB="" 
STATIC_LIB="$STATIC_LIB ${PATH}/libcrypto.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libdl-2.5.so" // I couldn't find the .a version for this, so I tried doing it this way, and have also tried doing just -ldl 
STATIC_LIB="$STATIC_LIB ${PATH}/libstdc++.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libgcc.a" 
STATIC_LIB="$STATIC_LIB ${PATH}/libc.a" 

g++ -g -I${INCLUDE_PATH} -o executable file1.cpp file2.cpp $STATIC_LIB 

私はこの方法がlibcryptoのために働くことをlddで確認しました、それは私が持ってきた外部の図書館だからです。しかし、これは他のすべてのためにはまったく機能しません。lddを使用したときでもリストに載っているのを見ることができます。誰かがこれを行う正しい方法を知っていますか?

P.S.私はまた、静的なものや-Wl、-Bstaticの使用など、いくつかの他の選択肢を試してみました。どちらも動作できませんでした。それが私の構文なのか、まったく不可能なのかは分かりません。

+0

私は「lddからできる限り多くの情報を隠す」必要性についてやや興味があります。たぶんXY問題? http://meta.stackexchange.com/a/66378 – renemilk

+0

これは、プログラムを中断する方法に関する追加情報の実行可能ファイルを分析する単なる一歩です。リバースエンジニアリング。誰かがプログラムを壊そうとしたり、そこから情報を得ようとしていると仮定して、私はできるだけ隠すことを望んでいました。 –

答えて

1

これらのライブラリlibstdc++,libgccおよびlibcは、gccでコンパイルされたプログラムを実行する上で非常に重要な点で特別です。特別なgccを静的にリンクする場合は、-static-libstdc++-static-libgccのオプションがあります。

これらのオプションを選択すると、実際に自分が行っていることを知っておく必要があります。これはあなたのプログラムに移植性の問題を引き起こす可能性があります。その多くは直感的ではありません。

+0

私は前にこれら2つのオプションを試しましたが、私が使用しているコンパイラはかなり古く、 '-static-libstdC++'を持っていません。そして、 '-static-libgcc'を追加したとき、' ldd'を実行してもそれを見ることができました。 –

関連する問題