Biblioteki nie zawsze zawierają symbol _mcount, ale aplikacje to robią (możesz to sprawdzić za pomocą programu gobjdump lub narzędzia nm). Czytałem, że _mcount służy do implementacji profilowania, ale symbol jest obecny nawet wtedy, gdy profilowanie jest wyłączone i włączona jest optymalizacja (-O2). Czy służy on innym celom dodatkowym?Dlaczego aplikacje skompilowane przez GCC zawsze zawierają symbol _mcount?
Aktualizacja: Jestem na Solarisie, więc jest to linker Solaris połączony z GCC, nie jestem pewien, czy to robi różnicę czy nie. Wersja GCC to 4.2.2. Zdarza się to, nawet jeśli skompiluję plik, który zawiera tylko kod int main() { return 0; }
bez powiązanych bibliotek.
Update2: I typ:
$ g++ -O2 mytest.cpp
$ nm a.out | grep _mcount
[65] | 134547444| 1|FUNC |GLOB |0 |11 |_mcount
I g ++ nie jest aliasem do niczego. Próbowałem także kompilacji z kompilatorem CC, i nie ma tego problemu. Próbowałem również aktualizacji GCC, symbol nadal istnieje w 4.4.1.
Twój system nie ma "gcc" (lub polecenia, którego używasz), aliasing do czegoś, co wywołuje kompilator z niektórymi domyślnymi przełącznikami, prawda? Czy możesz opublikować dokładne połączenia, których używasz do skompilowania tego? –
Bez aliasu, po aktualizacji za pomocą poleceń. –