Mangled Symbol Table в Objective-C при связывании статической библиотеки C ++

StackOverflow https://stackoverflow.com/questions/3718759

Вопрос

У меня есть класс называется параметры, написанные на 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 ++ не договорились о размере или макете переменных элементов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top