Bibliotheken enthalten nicht immer das _mcount-Symbol, aber Anwendungen tun dies (Sie können dies mit gobjdump oder dem Dienstprogramm nm überprüfen). Ich habe gelesen, dass _mcount verwendet wird, um das Profiling zu implementieren, aber das Symbol ist vorhanden, auch wenn das Profiling deaktiviert und die Optimierung aktiviert ist (-O2). Dient es einem anderen zusätzlichen Zweck?Warum enthalten Anwendungen, die von GCC kompiliert werden, immer das Symbol _mcount?
Update: Ich bin auf Solaris, also ist dies der Solaris-Linker in Kombination mit GCC, ich bin mir nicht sicher, ob das einen Unterschied macht oder nicht. Die GCC-Version ist 4.2.2. Dies geschieht auch, wenn ich eine Datei kompiliere, die nur den Code int main() { return 0; }
ohne verknüpfte Bibliotheken enthält.
Update2: I:
$ g++ -O2 mytest.cpp
$ nm a.out | grep _mcount
[65] | 134547444| 1|FUNC |GLOB |0 |11 |_mcount
Und g ++ ist nicht auf irgendetwas aliased. Außerdem habe ich versucht, mit dem Sun CC Compiler zu kompilieren, und dieses Problem besteht nicht. Ich habe auch versucht, GCC zu aktualisieren, Symbol existiert noch in 4.4.1.
Ihr System hat nicht zufällig 'gcc' (oder den Befehl, den Sie verwenden) aliased zu etwas, das den Compiler mit einigen Standardschaltern aufruft, oder? Kannst du die genauen Anrufe posten, die du benutzt, um das zu kompilieren? –
Kein Alias, Post mit Befehlen aktualisiert. –