静的C ++ライブラリをリンクするときに、Objective-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-> bitsまたはopts-> getBits()
常に印刷の整数値を返します
どういうわけか、シンボルテーブルがObjective-CとC ++側の間で壊れているように見えますが、これを引き起こすために何ができたのか分かりません。
Mac用にコンパイルすると、Objective-C ++でもコードが機能します。C++がC ++を呼び出す限り、それは動作しているように見えるので、メモリが破損しているようにはなく、シンボルテーブルの問題のように見えます。
どんな洞察も大歓迎です。
解決
Objective-Cで、 BOOL
typedefです signed char
. 。純粋なC ++をコンパイルする際にどのような定義を使用していますか? C ++コードとObjective-C ++コードがメンバー変数のサイズやレイアウトに同意しないため、それが異なる場合、あらゆる種類の奇妙さが得られます。
所属していません StackOverflow