Estoy usando la inicialización estática para facilitar el proceso de registrar algunas clases con una fábrica en C++. Lamentablemente, creo que el compilador está optimizando los objetos 'no utilizados' que están destinados a hacer el trabajo útil en sus constructores. ¿Hay alguna manera de decirle al compilador que no optimice una variable global?¿Cómo evito que se compilen mis variables globales 'no utilizadas'?
class SomeClass {
public:
SomeClass() {
/* do something useful */
}
};
SomeClass instance;
Mi punto de interrupción en el constructor de SomeClass no recibe ningún golpe. En mi código actual, SomeClass está en un archivo de cabecera y la instancia está en un archivo fuente, más o menos solo.
EDITAR: como adivinó KJAWolf, este código se compila realmente en una lib estática, no el ejecutable. Su propósito es registrar algunos tipos también proporcionados por la lib estática con una lista estática de tipos y sus creadores, para que una fábrica pueda leer en la construcción. Como estos tipos se proporcionan con la lib, no se desea agregar este código al ejecutable.
También descubrí que al mover el código a otro archivo fuente que contiene otro código existente, funciona bien. Parece que tener un archivo que consiste puramente en estos objetos globales es lo que está causando el problema. Es como si esa unidad de traducción fuera ignorada por completo.
¿Es su archivo fuente parte del ejecutable, o es parte de una biblioteca estática? – KJAWolf
Aha, buen trabajo de adivinación. En realidad, el archivo fuente es parte de una lib estática. ¿Eso causaría un problema? Estoy 80% seguro de haber hecho exactamente lo mismo antes y funcionó. –
tuve el mismo problema: http://stackoverflow.com/questions/599035/force-visual-studio-to-link-all-symbols-in-a-lib-file – Lodle