1

OS X Lion の MacPorts から gcc 4.6 でコンパイルした C++11 コードベースがあります。また、OS 固有の Objective C/C++ ファイルをコンパイルしてリンクし、最終的な実行可能ファイルを作成する必要もあります。プロジェクト全体をコンパイルするために同じコンパイラ バージョンを使用したいのですが、gcc の MacPorts バージョン 4.6 で Objective-C ファイルを認識できません。常に C++ コードとして解釈しようとし、.mm ファイル拡張子を無視します。(これらのファイルのコンパイルは、MacPorts ではなくXcode バージョンの gcc で動作します。ただし、その gcc はバージョン 4.2 であり、gcc 4.6 以降ですべてをコンパイルしたいと考えています。)

IDE やビルド ツールは忘れてください。コンパイラのコマンドライン呼び出しから同じ結果が得られます。つまり、Apple gcc で .mm ファイルをコンパイルするために機能するコマンドラインを記録し、コマンドラインから機能することを確認してから、何も変更せずに同じコマンドを実行しますが、使用するコンパイラーは機能しません。私は何が欠けていますか?

4

1 に答える 1

1

発生する特定のエラーは、ブログ投稿からのこの引用と同じであるため、私が抱えている特定の問題は、Apple 固有の言語拡張が原因である可能性があります。

これを追加した後、COCOA Objective-C UI の一部がコンパイルされているプロジェクトの部分に到達するまで、約 30 秒間問題がありませんでした。

/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h:75:24: エラー: '^' トークンの前に非修飾 ID が必要です /Developer/SDKs/MacOSX10.7 .sdk/System/Library/Frameworks/Foundation.framework/Headers/NSTask.h:75:24: エラー: '^' トークンの前に ')' が必要です

ええとああ。私はこれが何であるかを知っています。これは、Apple の「ブロック」言語拡張です。ブロックは、一連のシステム ヘッダー ファイルで使用されているようです。MacPorts gcc を使用してこれを回避する方法はないと思います。FSF gcc は、ブロックについて認識していません。私にとって幸いなことに、目的の C/C++ コードには gcc 4.6 でコンパイルする必要があるものは何もなかったので、clang を使用してこのターゲットをコンパイルしました。

于 2013-04-16T23:37:36.933 に答える