さまざまなコンピューターにコンパイルされている場合、C ++のマングル名は一貫していますか?
-
27-10-2019 - |
質問
一般的に、私が使用して観察したこと nm
Linuxにはそれがあります T
シンボル名(私が興味を持っています)は、私が使用していない場合でも、さまざまなコンピューターで一貫しています extern "C"
. 。私の観察は正しいですか?
ノート すべてのコンピューターでGCCを使用しています。
解決
コンピューター、時刻、または天気が名前のマングルに影響を与えることは非常に珍しいでしょう。
逸脱を引き起こす可能性が高いのは、コンパイラバージョンの違いです。
しかし、多くのLinuxプラットフォームは、特にマングリングルールという名前を含むC ++のABI(アプリケーションバイナリインターフェイス)を定義しています。これらのプラットフォームでは、同じソースコードが、最適化レベル、コンパイラバージョン、ホスト名、ハードディスクのシリアル番号、時刻、天気、お気に入りのスポーツチームが先週失ったかどうか、または要因ではない場合に関係なく、同じマングル名にコンパイルされます。 ABIで明示的に言及されています。
所属していません StackOverflow