はじめに
gccの-rdynamic optionの調査メモ。
gcc 9.1.0, glibc 2.29を対象に調査した。
基本内容に差はないと思うが、target archはx86_64-pc-linux-gnu。
TL;DR
-rdynamicオプションはリンク時のみ効果がある。
-rdynamicオプションを適用すると、共有ライブラリから実行ファイルのシンボル情報を動的に取得できるので、バックトレースの表示などに使われる。
-rdynamicオプションを適用することで、共有ライブラリとして利用可能な実行ファイルを作成できる。
-rdynamicオプションを適用するとシンボルバッティングや意図せず共有ライブラリに制御されてしまうリスクが増えるので、明確に目的がないなら通常は無効にしておく。
gcc,glibcのソースコードは面白い。
gccのspecファイルむずい。
公式ドキュメント
GCCには大量の起動オプションがあり、manだと少し見づらい。
そんなときは公式ドキュメントのOption Indexで確認すると楽。
https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Option-Index.html#Option-Index_op_letter-R
-rdynamic
Pass the flag -export-dynamic to the ELF linker, on targets that support it. This instructs the linker to add all symbols, not only used ones, to the dynamic symbol table. This option is needed for some uses of dlopen or to allow obtaining backtraces from within a program.
曰く、-rdynamic optionは、Link Options。
すなわち、オブジェクトファイルから実行ファイルを生成するときにのみ作用し、リンクステップがない場合無視される。
そして、-rdynamicオプションがgccに渡された場合、リンカに-export-dynamicオプションを渡す。
30分で取材
掲載無料
原稿確認OK