2017-06-01 12 views
0

私は公表できないサードパーティ開発者のコ​​ンパイル済みCライブラリから関数を呼び出しています。問題は、アプリケーションがXcode 8を使用して構築されているときに関数がエラーを返しますが、Xcode 7を使用すると問題なく動作します。私はアプリケーション内の.mmファイルからライブラリ関数を呼び出しています。これが第三者図書館に起因する可能性があることはわかっていますが、これに影響を与える可能性のあるXcodeバージョンの変更点は何ですか?どこから始めたらいいのか分からず、ここにコードを貼り付けることはできません。.mmファイルは、Xcode 7でビルドされていてもXcode 8ではビルドされていない場合でも動作します。

+0

環境を確認しましたか?すべての設定ファイル、初期化呼び出しなどは本当に同じですか?関数が同じパラメータで呼び出されているかどうかチェックしましたか? – clemens

答えて

0

私はこれを回避する方法を考えましたが、それがなぜそのように動作するのかはまだ分かりません。 エラーの原因がOptimization Levelであることがわかりました。 XCode 8では、最適化レベルを設定する必要があります。そうしないと、失敗します。

失敗した特定のソースコードは、このです:

char subject[256]; 
memset(&subject, 0x00, sizeof(subject)); 
strcpy(subject, "Test"); 
mail.emailSubject = subject 

私はこれで上記のコードに置き換え:

mail.emailSubject = (char*)"Test"; 

を誰もが説明できる場合は、お気軽にどうぞ。ありがとう!

0

コードの最初のブロックは、スタックのchar配列を割り当てていて、それをemailSubjectに割り当てています。私はどのオブジェクトの型か分かりません。スタックメモリをコピーせずに単純に割り当てると、関数がスタックメモリを返すときにメモリが割り当て解除され、emailSubjectはダーティメモリを保持します。

"Test"を割り当てると、コンパイラは関数が返った後に割り当て解除されない静的変数として "Test"を割り当てます。

希望します。

関連する問題