今のところ、次の質問を自分で実験して整理する環境がないため、申し訳ありません。
1) 4 つのライブラリ ファイルがあるlibmylib_super.a
とします。リンクするライブラリを指定する際、次のアプローチの違いは何ですか:libmylib_super.so
mylib_dumb.a
mylib_dumb.so
A) -l:libmylib_super.a
B) -llibmylib_super
C) -lmylib_super
D)-lmylib_dumb
-static
2)マニュアルページからの定義:
動的リンクをサポートするシステムでは、これにより共有ライブラリとのリンクが妨げられます。他のシステムでは、このオプションは効果がありません。
このリンカ オプションは質問 1 と関係がありますか? それとも……ひょっとして、お互いに干渉しあう?
ありがとう。
--- 2009-12-28 編集 ---
Boost date_time ライブラリにリンクすることで、環境を整えて少し実験しました。libboost_date_time-mt-d.a
、、(シンボリック リンク)の3 つのライブラリ ファイルがあるとしますlibboost_date_time-mt-d.so.1.41.0
。libboost_date_time-mt-d.so -> libboost_date_time-mt-d.so.1.41.0
A.1) -l:libboost_date_time-mt-d.a
==> リンク OK、ライブラリ ファイルがなくてもバイナリは動作します。
A.2) ==>リンク エラー-l:libboost_date_time-mt-d.a
あり-static
/usr/bin/ld: cannot find -lm
C.1) -lboost_date_time-mt-d
==> リンク OK、バイナリは動作しますが、共有ライブラリ ファイルが必要です。
C.2) ==>リンク エラー-lboost_date_time-mt-d
あり-static
/usr/bin/ld: cannot find -lm
A.2 と C.2 のエラーについて何か考えはありますか?
さらに、C.1でプログラムを実行している間、共有ライブラリファイルを名前で検索しているように見えますlibboost_date_time-mt-d.so.1.41.0
が、libboost_date_time-mt-d.so
. プログラムがライブラリの正確なバージョンのないシステムで実行されている場合、それは不便ではないでしょうか? 共有ライブラリを使用しているときにバージョンを処理する実用的な方法は何ですか?