Als Teil unseres Build-Prozesses generieren wir eine Map-Datei, wenn wir unsere ausführbare Datei kompilieren. Zum Beispiel:Linker-Map-Datei hat manchmal verstümmelte Symbole, aber nicht immer
g++ -Wl,-Map,/tmp/foo.map -o foo foo.cpp
In einem Versuch von GCC 4.3/4,4-4,9 GCC migrieren wir Setup einen neuen Build-Server haben. Die Map-Datei, die vom 4.9-Build-Server generiert wird, enthält keine ungültigen Symbolnamen. Die Map-Datei, die von den 4.3/4.4-Build-Servern generiert wird, tut dies. die oben läuft zum Beispiel mit 4.3 ich dies in der Map-Datei snipped erhalten:
.plt 0x0000000000400700 0x90 /usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../lib64/crt1.o
0x0000000000400710 [email protected]@GLIBCXX_3.4
0x0000000000400720 [email protected]@GLIBCXX_3.4
0x0000000000400730 [email protected]@GLIBC_2.2.5
Ausführen des gleichen Code gegen 4.9 Ich erhalte die folgenden Ausschnitt:
.plt 0x00000000004006e0 0x80 /usr/lib/../lib64/crt1.o
0x00000000004006f0 std::ostream::operator<<(int)@@GLIBCXX_3.4
0x0000000000400700 std::ios_base::Init::Init()@@GLIBCXX_3.4
0x0000000000400710 [email protected]@GLIBC_2.2.5
0x0000000000400720 [email protected]@GLIBC_2.2.5
Ist diese Änderung zu erwarten? Gibt es eine Möglichkeit, eine fehlerhafte Ausgabe mit gcc 4.9 zu erzeugen (eine Art Rückwärtskompatibilität)? Ich frage, weil spätere Tools in unserem Build die Symboldatei verwenden und auf den entfremdeten Namen ersticken.
Danke, Hinzufügen --no-demangle behoben das Problem. – Pace