Las bibliotecas no siempre contienen el símbolo _mcount, pero sí las aplicaciones (puede verificar esto con gobjdump o la utilidad nm). He leído que _mcount se usa para implementar el perfil, pero el símbolo está presente incluso cuando el perfil está deshabilitado y la optimización está habilitada (-O2). ¿Sirve para algún otro propósito adicional?¿Por qué las aplicaciones compiladas por GCC siempre contienen el símbolo _mcount?
Actualización: Estoy en Solaris, este es el engarce de Solaris combinado con GCC, no estoy seguro de si eso hace la diferencia o no. La versión de GCC es 4.2.2. Esto sucede incluso si compilo un archivo que solo contiene el código int main() { return 0; }
sin bibliotecas vinculadas.
Update2: I Tipo:
$ g++ -O2 mytest.cpp
$ nm a.out | grep _mcount
[65] | 134547444| 1|FUNC |GLOB |0 |11 |_mcount
y G ++ no tiene un alias para nada. Además, traté de compilar con el compilador Sun CC, y no tiene este problema. También intenté actualizar GCC, el símbolo todavía existe en 4.4.1.
Su sistema no tiene 'gcc' (o el comando que está usando) alias a algo que llama al compilador con algunos conmutadores predeterminados, ¿o no? ¿Puedes publicar las llamadas exactas que estás utilizando para compilar esto? –
Sin alias, publicación actualizada con comandos. –