動的ライブラリを作成したいとしましょうdynamic.so
が、私のコードは他の静的ライブラリに存在する関数を参照していますstatic.a
。当然のことながら、オプションを使用してコンパイルおよびリンクするg++
と、参照される関数が、実行時に と一緒にリンクする必要がある他の動的ライブラリに実装されることが期待されます。つまり、(モジュロシンタックス) をしてくれればそれでいいのです。-shared
dynamic.so
dynamic.so
-l static
しかし、その他のライブラリは実際には静的なものなので、それはできません。メインプログラムのコンパイル時にも静的ライブラリをリンクできないと仮定しましょうが、動的ライブラリのみを使用することを余儀なくされています。したがって、私が本当に望んでいるのは、参照された関数からコンパイルされたコードを in に含めることstatic.a
ですdynamic.so
。
関連する質問に対するこの回答--whole-archive
は、オプションを使用して に含めることstatic.a
を提案していますdynamic.so
。しかし、私の場合static.a
は巨大です。そして、私は本当にそのすべてを必要としません.1つの関数定義だけが必要です.
別の質問に対するこの回答は、コンパイル時に静的ライブラリにリンクすると、実際に参照されるコードのみがバイナリに含まれることを意味することを説明しています。これはまさに、単一の関数参照でやりたいことです! そこに静的アーカイブ全体を入れたくありません。
しかし、どうすればそれを達成できますか?の必要な部分だけを含めるにはどうすればよいstatic.a
ですdynamic.so
か?