動的ライブラリdynamic.so
を作成したいとしましょうが、私のコードは他の静的ライブラリstatic.a
に存在する関数を参照しています。当然ながら、g++
と-shared
オプションをコンパイルしてリンクすると、dynamic.so
は、実行時にdynamic.so
と一緒にリンクする必要がある他のダイナミックライブラリで参照される関数が実装されることを期待します。言い換えれば、私が-l static
(モジュロ構文)をしている限り、それは幸せです。静的ライブラリと動的ライブラリ - more C++ fun
しかし、他のライブラリは実際には静的ライブラリなので、私はそれを行うことはできません。私のメインプログラムのコンパイル時に静的ライブラリをリンクすることはできないと仮定しましょうが、私は動的ライブラリのみを使用するように強制されます。だから私が本当に望むのは、static.a
の参照関数からコンパイルされたコードをdynamic.so
に入れることです。関連する質問へ
This answerはdynamic.so
でstatic.a
を含める--whole-archive
オプションを使用することを提案しています。しかし、私の場合、static.a
は巨大です。そして、私は本当にそれのすべてを必要としません、私はその1つの関数の定義が必要です。
This answer他の質問との違いは、コンパイル時に静的ライブラリにリンクすると、実際に参照されるコードのみがバイナリに含まれることです。まあ、これはまさに私の単一の関数参照のためにやりたいことです!私は本当にそこに静的なアーカイブ全体を望んでいません。
しかし、どうすれば実現できますか? static.a
の必要な部分だけをdynamic.so
に含めるにはどうすればよいですか?
恐ろしい!私は '-l'を自分自身に言及したことに注意してください。もう1回、gccの引数の順序が問題であるという事実に噛まれました...ありがとう! – Thomas