He notado que, incluso después de eliminar los símbolos de mi ejecutable, los nombres de las clases y sus métodos todavía se incluyen al final del archivo ejecutable.
Por ejemplo:
#include <iostream>using namespace std; class Clingons {public: void clingForever () {cout << "Qapla" << endl; }}; int main (int argc, char * argv []) {Clingons se aferran; cling.clingForever (); return 0;}
Luego compile y vincule con:
g ++ cling.cpp -o cling
Ahora , cuando miro la parte inferior del archivo "cling" resultante con un editor hexadecimal, puedo ver el nombre de la clase "Clingons" junto con sus métodos. También puedo ver esta información mientras depuro ..
incluso después de quitarlos:
strip -x cling
Puedo todavía veo la misma información.
Entonces, ¿por qué no se eliminó esta información cuando usé el comando anterior? ¿Hay alguna forma de eliminar (o alterar) esta información de forma que no sea a mano?
La versión utilizada de GCC es i686-apple-darwin10-llvm-g ++ - 4.2 (GCC) 4.2.1
Este es solo un caso de ejemplo. Mi proyecto real involucra el marco Qt.