2009-06-29 7 views
6

Xcode 3.1.3を使用している私のCocoa Touch iPhoneアプリケーションからC++ライブラリ(CLucene)を使用しようとしています。 iPhoneのシミュレータを実行するとすべてうまく動作しますが、デバイスを実行すると状況が変わってしまいます。ポインタがObjective-C++コード(私のアプリ)からC++ライブラリ(CLucene)に正しく渡されていないようです。iPhoneアプリのC++コード

デバイス上でアプリケーションをデバッグする際、Objective-C++の0x12546c0からC++の0x4eへのC++関数の変更にパラメータとして渡されたconst char *変数を見ることができます。 0x4eは有効なconst char *を指していないので、C++コードは失敗します。これは、シミュレータでのデバッグ時には発生しません。

私はC++ライブラリをアプリケーションに直接コンパイルしており、静的ライブラリや動的ライブラリにはリンクしていません。

ご協力いただければ幸いです。

答えて

4

プロジェクトのビルド設定で「コンパイル用のコンパイル」を無効にすると、問題が修正されます。

+0

本当ですか?私は、たくさんのフロートを使用するプログラムのスピードを上げることができると聞いてきました。しかし、私はあなたの質問にこの答えを期待していないだろう。 – Nosredna

+0

コードのスピードアップについても同じことを聞いたことがありますが、この場合は「コンパイル用」を有効にすることで問題を再現できます。私はそれがなぜ、なぜこのC++コードにリンクするときにのみ起こるのかは分かりませんが、明らかに影響があります。 –

0

iPhoneアプリでC++コードを使用しても問題ありません(私はいつもしています)。

ポインターはポインタとして渡されるだけで、解釈されることはありません。
Objective-C++オブジェクトは 'const char *'であり、実行時に 'const char *'に変換されている他の型ではありませんか?

+0

はい、char配列を作成します。値は実際にはconst char *であり、実行時には変換されません。 –