静的C ++ライブラリをリンクするときに、Objective-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-> bitsまたはopts-> getBits()

常に印刷の整数値を返します

どういうわけか、シンボルテーブルがObjective-CとC ++側の間で壊れているように見えますが、これを引き起こすために何ができたのか分かりません。

Mac用にコンパイルすると、Objective-C ++でもコードが機能します。C++がC ++を呼び出す限り、それは動作しているように見えるので、メモリが破損しているようにはなく、シンボルテーブルの問題のように見えます。

どんな洞察も大歓迎です。

役に立ちましたか?

解決

Objective-Cで、 BOOL typedefです signed char. 。純粋なC ++をコンパイルする際にどのような定義を使用していますか? C ++コードとObjective-C ++コードがメンバー変数のサイズやレイアウトに同意しないため、それが異なる場合、あらゆる種類の奇妙さが得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top