2010-11-25 15 views
11

私は同じ名前の静的ライブラリと動的ライブラリlibclsocket.aとlibclsocket.soを持っています。私がリンクしたいライブラリを指定すると、単にライブラリとして-lclsocketと入力するだけです。私のプログラムは完全にうまく動作しますが、どのライブラリを使用していますか?静的ライブラリまたは動的ライブラリ?私は私の友人に私のプログラムを与えたいと思います。私はライブラリにリリースを含める必要があるかどうか分かりません。 C++、codelite、pcLinuxOS 2010Linuxでは、静的ライブラリまたは動的ライブラリにリンクしているかどうかをどのように確認できますか?

+7

GCCでビルドするときに '-static'フラグを指定していないので、共有オブジェクトにリンクしている可能性は非常に高いです。 @Soo Wei Tanが答えたように、バイナリに対して 'ldd'を使って実行時リンカーの依存関係を調べることができます。 – birryree

+0

希望のライブラリを静的にリンクするように指定できますか? – TheFuzz

+1

ライブラリのフルネームを渡すことで、静的リンクを選択してリンクすることができます。 'gcc -o OutFile <ソースファイル> -l:libclsocket.a'のように。 ':'に注意してください。とても重要です。私はこの振る舞いの公式文書を見たいと思っていますが、 'gcc'のマンページではこの使用法は言及していません。 – birryree

答えて

5

実行可能ファイルでlddを実行し、付随する.soが依存関係の一覧で必要に応じて検出されているかどうかを確認できます。

lddのマニュアルページはhereです。

+0

共有ライブラリにリンクしています。だから私はどのように静的なlibにリンクするのだろうか?私はまた、それが共有ライブラリにデフォルトであると仮定しています。 – TheFuzz

2

フラグ-staticを使用すると、すべてのコンポーネントが静的になります。 -lには共有ライブラリが含まれている場合があります。したがって、スタティックライブラリのファイル名を指定すると(たとえば、/usr/lib/libfoo.aとすると、-lは付加されません)、目的の効果が得られます。

関連する問題