2016-04-01 15 views
2

次の問題があります。私は共用ライブラリを持っています。これは一緒にリンクされた翻訳単位の集まりなので、共有ライブラリをコンパイルすると、リンカのエラーはありません。GCC共有ライブラリを実行可能ファイルにリンクする

共有ライブラリは、共有ライブラリが使用しているエクスポートを含む実行可能ファイルから動的にロードされます(ライブラリで使用される参照は実行時に解決されます)。

主な問題は、アプリケーションをクラッシュさせるのではなく、静的に修正できるように、未定義の参照警告が必要なことです。

"-Wl、--no-undefined"をgccに渡すことができるので、実際にはこれらのエラーを取り戻すことができますが、実際には実行可能ファイルのエクスポートのすべての未定義参照も表示されます。これらの警告を私の翻訳単位の範囲にフィルタリングしたいだけです。

これは可能ですか?そうでない場合、どのように共有ライブラリのエクスポートを持つ実行可能ファイルへの参照を定義することができます。

+1

通常、未解決の参照はリンクに失敗します。あなたがしていることははっきりとは分かりません。あなたの質問に[mcve]を含めてください。 –

答えて

1

ライブラリ&メインプログラム-Wl,-z,nowでリンクできます。ランタイムldsoはすべての参照を直ちに解決し、見つからなければエラーをスローします。

そうでなければ、リンカのマニュアルで「このELFでシンボルを満たすことができますが、DT_NEEDEDとして実際には列挙しません」と言うオプションが表示されていません。

-Wl,--no-undefinedを試して、スクリプトで出力を解析して、メインプログラムが満たしていると思われるシンボルを除外することができます。

メインプログラムで提供されているすべてのシンボルに__attribute__((weak))というラベルを付けることもできますが、引き続き-Wl,--no-undefinedを使用することもできます。弱い記号はエラーとして報告されません。

関連する問題