Mangled Symboltabelle in Objective-C, wenn die Verknüpfung statische C ++ Bibliothek
-
02-10-2019 - |
Frage
Ich habe eine Klasse namens Optionen in C ++ geschrieben, hier sind die Header-Informationen:
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
};
};
In der Objective-C Abschnitt I initialisieren Optionen wie folgt aus:
Options *opts=new Options([fileName cStringUsingEncoding:NSUTF8StringEncoding]);
Nun, was passiert, ist, dass, wenn ich übergeben Sie den Zeiger auf einen anderen C ++ Methode es funktioniert gut, aber wenn ich versuche tatsächlich den Zugriff auf alles, was in der objektiven c Seite, beispielsweise
opts-> Bits oder opts-> GetBITS ()
Es gibt immer den Integer-Wert für den Druck
Es sieht aus wie irgendwie die Symboltabelle zwischen der Objective-C und C ++ Seite verstümmelt wird immer, aber ich habe keine Ahnung, was ich Ursache, dies zu tun hätte tun können.
Der Code funktioniert auch mit Objective-C ++, wenn ich für den Mac kompilieren, und so lange, wie C ++ ruft C ++ es scheint zu funktionieren, so ist es nicht wie der Speicher beschädigt ist immer, es sieht aus wie eine Symboltabelle Ausgabe.
Jeder Einblick sehr geschätzt würde.
Lösung
In Objective-C ist BOOL
ein typedef zu signed char
. Was Definition verwenden Sie, wenn reines C ++ kompiliert? Wenn es anders ist, finden Sie alle Arten von Seltsamkeit bekommen, weil der C ++ Code und die Objective-C ++ Code wird nicht auf die Größe oder das Layout der Mitgliedsvariablen übereinstimmen.