Linuxに実行可能ファイルがあります-exe
この実行可能ファイルには、コード全体で使用されるいくつかの関数が含まれています。
sendMsgdebugPrint
.so次に、実行可能ファイルに追加機能を提供するを動的にロードしたいと考えています。
この共有ライブラリには、 と のヘッダーが含まれsendMsgていdebugPrintます。
この共有ライブラリを で読み込みdlopen()、 で API を作成しますdlsym()。
ただし、読み込み時にすべてのシンボルを解決するためdlopen()に使用します。RTLD_NOW
sendMsgシンボルが見つからないと言って失敗します。
sendMsg.cがコンパイルされているため、このシンボルは実行可能ファイルに含まれている必要があります。
ただし、実行可能ファイルはmakeプロセスによって削除されます。そのdlopenため、シンボルを見つけることができないのは理にかなっています。
どうすればこの状況を解決できますか?
- 共有関数を静的ライブラリに構築し、その静的ライブラリを
exeと の両方にリンクできます.so。これにより、コードサイズが増加します:( - のストリッピングを削除し
exeて、シンボルを見つけることができます - 私が知らないコンパイル時のリンクマジックを実行して
.so、シンボルがどこにあるかを知っていますexe