Mangled tabella dei simboli in Objective-C durante il collegamento statico libreria C ++
-
02-10-2019 - |
Domanda
Ho una classe denominata opzioni scritto in C ++, ecco le informazioni di intestazione:
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
};
};
Nella sezione Objective-C, ho inizializzare opzioni come questo:
Options *opts=new Options([fileName cStringUsingEncoding:NSUTF8StringEncoding]);
Ora, quello che succede è che se mi passate il puntatore ad un altro metodo che funziona bene, ma C ++ se io in realtà cerco di accedere a qualsiasi cosa nel lato oggettivo c utilizzando, ad esempio
opts-> bits o opts-> getbits ()
Si restituisce sempre il valore intero per la stampa
Sembra che in qualche modo la tabella dei simboli è sempre alterati tra l'Objective-C e C ++ lato, ma non ho idea di quello che avrei potuto fare per fare causa questo.
Il codice funziona anche con Objective-C ++ se compilo per il mac, e fintanto che C ++ sta chiamando C ++ sembra funzionare quindi non è come il ricordo è sempre corrotto, sembra proprio come un problema di simbolo tavolo.
Tutta la comprensione sarebbe molto apprezzato.
Soluzione
In Objective-C, BOOL
è un typedef per signed char
. Quale definizione stai usando quando si compila puro C ++? Se è diverso, si otterrà ogni sorta di stranezza, perché il codice C ++ e il codice Objective-C ++ non saranno d'accordo sulle dimensioni o il layout delle variabili membro.