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