Библиотеки не всегда содержат символ _mcount, в отличие от приложений (это можно проверить с помощью gobjdump или утилиты nm). Я читал, что _mcount используется для реализации профилирования, но символ присутствует, даже когда профилирование отключено и включена оптимизация (-O2). Служит ли он какой-то другой дополнительной цели?
Обновление: я на Solaris, так что это компоновщик Solaris в сочетании с GCC, я не уверен, имеет ли это значение или нет. Версия GCC — 4.2.2. Это происходит, даже если я компилирую файл, содержащий только код int main() { return 0; }
без связанных библиотек.
Обновление 2: я набираю:
$ g++ -O2 mytest.cpp
$ nm a.out | grep _mcount
[65] | 134547444| 1|FUNC |GLOB |0 |11 |_mcount
И g++ ни к чему не привязан. Кроме того, я попытался скомпилировать с помощью компилятора sun CC, и у него нет этой проблемы. Я также пытался обновить GCC, символ все еще существует в 4.4.1.
gcc
(или команда, которую вы используете) с псевдонимом чего-то, что вызывает компилятор с некоторыми параметрами по умолчанию, не так ли? Можете ли вы опубликовать точные вызовы, которые вы используете для компиляции? - person Chris Lutz   schedule 08.01.2010