私は、dlopen()を使用してプログラムによって開かれる共有オブジェクトライブラリを構築しようとしています。このライブラリは、静的な別のライブラリによって提供される機能を使用します。静的ライブラリのシンボルを共有ライブラリビルドに含める方法を教えてください。
動的なリンクをリンクするときにリンク線に適切なフラグを設定しています(例:libfoo.aに-lfooがある)、リンカーは不平を言っていません。ただし、メインプログラムがダイナミックライブラリのdlopen()を呼び出すと、静的ライブラリのシンボルを参照する "未定義シンボル"メッセージが表示されて呼び出しが失敗します。
nmを実行すると、問題のシンボルがダイナミックライブラリで定義されておらず、メインプログラムにはそのシンボルが含まれていないことを示しています。シンボル自体は初期化されていないデータセクションにあります(nm出力のシンボルタイプ "B")。
'--whole-archive'という答えは、アーカイブ内のすべてのシンボルを共有ライブラリのエクスポートシンボルに変換します。あなたがただ一つのシンボルを必要とするならば、この答えはあなたの.soにはるかに少なく膨らんでいます。 – MuertoExcobito