シンボルをc++filt
デマングルするコマンドがありますが、反対のことを行ってシンボル名をマングルするツールは何ですか?
dlsym()
これは、マングルされた C++ 関数名を呼び出したい場合に便利です。新しいコンパイラ バージョンや新しいコンパイラ ブランドが使用されているため、または現在複数のプラットフォーム用にコンパイルされているために、時間の経過とともに変更される可能性があるため、コード内の名前マングリングをハードコーディングしたくありません。
コードがコンパイラに依存しないように、実行時に C++ 関数を表す文字列をプログラムで取得する方法はありますか? これを行う 1 つの方法は、コンパイル時に、使用されているコンパイラの名前マングリングを実行し、適切なマングルされた C++ シンボル名dlsym()
を使用する文字列に挿入するユーティリティを呼び出すことです。
これは、このサイトで見つけた解決策に最も近いものです。これは、固定の C スタイル名を使用して、必要なライブラリで定義されている C++ シンボルを間接的に使用することによって達成されますが、dlsym()
そのライブラリを制御できない場合これはオプションではありません。