Mangled Symbol Table в Objective-C при связывании статической библиотеки C ++
-
02-10-2019 - |
Вопрос
У меня есть класс называется параметры, написанные на C ++, вот информация заголовка:
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
};
};
В разделе Objective-C я инициализирую такие параметры:
Options *opts=new Options([fileName cStringUsingEncoding:NSUTF8StringEncoding]);
Теперь, что произойдет, это то, что если я передаю указатель на другой метод C ++, он работает нормально, но если я фактически пытаюсь получить доступ к чему-либо в объективной стороне C, используя, например,
OPTS-> биты или OPTS-> GetBits ()
Это всегда возвращает целочисленное значение для печати
Как-то похоже на то, что таблица символов движется между набором объекта-C и C ++, но я понятия не имею, что я мог сделать, чтобы сделать это.
Код работает даже с Objective-C ++, если я компилируюсь для Mac, и до тех пор, пока C ++ вызывает C ++ C ++, похоже, работает так, что это не похоже на то, что память - это повреждено, это просто выглядит как проблема с символом.
Любое понимание было бы очень ценится.
Решение
В объекте-с, BOOL
это типичный файл signed char
. Отказ Какое определение вы используете при компиляции чистого C ++? Если он отличается, вы получите все виды странности, поскольку код C ++ и код Objective-C ++ не договорились о размере или макете переменных элементов.