tabla de símbolos mutilado en Objective-C al vincular C ++ biblioteca estática
-
02-10-2019 - |
Pregunta
Tengo una clase llamada opciones escritas en C ++, aquí está la información de la cabecera:
class Options {
public:
string filename;
string chunkDir;
string outFilename;
string inFilename;
BOOL compress;
BOOL extract;
BOOL print;
BOOL reconstruct;
int bits;
Options(string inFilename);
Options(int argc, char** argv);
void unsupported(string s);
void setOptionsFromArguments(int argc, char** argv);
void validateOptionCombination();
int getBits() {
return bits
};
};
En la sección de Objective-C, I inicializar Opciones como esto:
Options *opts=new Options([fileName cStringUsingEncoding:NSUTF8StringEncoding]);
Ahora lo que pasa es que si paso el puntero a otro método que funciona bien, pero C ++ si realmente tratar de acceder a cualquier cosa en el lado objetivo c utilizando, por ejemplo
opts-> bits de o opts-> getbits ()
Siempre devuelve el valor entero para la impresión
Parece que de alguna manera la tabla de símbolos se está destrozado entre el objetivo y el lado C-C ++, pero no tengo ni idea de lo que podría haber hecho para hacer causa esto.
El código funciona incluso con Objective-C ++ si compilo para el mac, y siempre que C ++ está llamando C ++ parece que funciona así que no es igual que la memoria se está dañado, sólo se ve como un problema de tabla de símbolos.
Cualquier penetración sería muy apreciada.
Solución
En Objective-C, BOOL
es un typedef a signed char
. ¿Qué definición está usando al compilar C ++ puro? Si es diferente, podrás obtener toda la rareza, ya que el código C ++ y el código de Objective-C ++ no estarán de acuerdo en el tamaño o la disposición de las variables miembro.