私の問題は少し複雑です:
ライブラリ: CおよびC++で記述されたライブラリがあります。これは、AppleLLVMを使用してXCodeで完全にコンパイルされます。このライブラリ自体の作業はCコードによって実行されますが、私はC ++を好むため、C++部分は単なるC++インターフェイスです。理論的には、C++のみを使用して通信する必要があります。
アプリケーション: 上記のライブラリを使用するObjective-Cのアプリケーションがあります。当然のことながら、ライブラリとの通信はC ++を介して行われるため、「Objective-C ++」からライブラリを呼び出すには、.mmファイルが必要です。
コンパイル中に...「C」言語のいくつかの発行が発生します:
- エラー:非定数静的データメンバーは行外で初期化する必要があります
- エラー:ステートメント式はファイルスコープでは許可されていません
- 等...
これはObjective-C++でのみ発生します
- 目的-C++(アプリ)-> C ++ヘッダー(lib)-> Cヘッダー(lib、extern "C"付き)-> OK !!! なぜ?
ライブラリのテスト用に別のC++アプリケーションを作成すると、問題ありません。
- C ++(アプリ)-> C ++(lib)-> Cヘッダー(lib、extern "C"付き)-> OK
詳細:ここでは常にAppleLLVMコンパイラを使用しています
質問: Objective-C++コードからC++からCコードをコンパイルするにはどうすればよいですか?通常のC++コードからコンパイルするのとはなぜ違うのですか?