4

ステータスバーにステータスバーアイコンを配置するMac OS用のブラウザプラグインを作成しています。これにより、ユーザーはブラウザプラグインとのインターフェースに使用できます。XCode 4.4.1 で FireBreath 1.6 プロジェクトを正常にビルドし、ブラウザにインストールできます。ただし、FireBreath は C++ を使用しますが、Mac OS 用の既存のライブラリの大部分は Objective C で記述されています。

/Mac/projectDef.make ファイルに、Cocoa Framework と Foundation Framework を追加しました。これは、ここやインターネットで見つけた他のリソースで提案されているとおりです。

target_link_libraries(${PROJECT_NAME}
    ${PLUGIN_INTERNAL_DEPS}
    ${Cocoa.framework} # added line
    ${Foundation.framework} # added line
)

XCode で .mm ファイルと .m ファイルを使用して新しいプロジェクトが作成されることを期待して、prepmac.sh を再実行しました。しかし、それらは無視されているようです。.cpp ファイルと .h ファイルしか表示されません。projectDef.make ファイルにそれらのルールを追加しましたが、違いはないようです:

file (GLOB PLATFORM RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
    Mac/[^.]*.cpp
    Mac/[^.]*.h
    Mac/[^.]*.m    #added by me
    Mac/[^.]*.mm   #added by me
    Mac/[^.]*.cmake
)

ファイルを手動で追加しても、一連のコンパイル エラーが発生します。それらの約 20 があり、すべてファイルNSObjRuntime.hfileに関連しています。

Parse Issue - Expected unqualified-id
Parse Issue - Unknown type name 'NSString'
Semantic Issue - Use of undeclared identifier 'NSString'
Parse Issue - Unknown type name 'NSString'
...
...
Semantic Issue - Use of undeclared identifier 'aSelectorName'
...
...
Semantic Issue - Use of undeclared identifier 'aClassName'
...

同様のエラーでしばらくの間このように続きます...

私が読んだことによると、これらのエラーは、プロジェクトに含まれていると思われる Foundation Framework への依存関係が原因で表示されます。XCodeでプロジェクトをクリックしてみました

私は今、次に何を試すべきかわからないところまで来ています。C/C++ コードで Objective C を使用するのは難しくないと言う人もいますが、XCode と Objective C を初めて使用することで、混乱が生じる可能性があります。これは、この新しいプラットフォームでの 4 日目です。

XCode で Objective C コードをコンパイルするにはどうすればよいですか? タグ​​で一般的な漠然としたワンライナーではなく、詳細な回答を残していただければ幸いです. 私は少し頭がいっぱいですが、このハードルを乗り越えることができれば、そこから先に進むことができると確信しています.

アップデート:

projects/MyPlugin/CMakeLists.txt を編集し、そこに .m および .mm ルールも追加しました。prepmac.sh を実行した後、ファイルはプロジェクトに含まれますが、それでも同じコンパイル エラーが発生します。

すべての .h ファイルと .mm ファイルを Obj C コードから MyPlugin ルート フォルダーに移動し、prepmac.sh ファイルを再実行しました。問題はまだ存在します。同じコンパイルエラー。

4

1 に答える 1

2

問題は、目的の c タイプおよび/またはインクルードを持つ C++ ファイルに含まれている .h ファイルがあることです。必要なことを行うには、c++ で使用されるすべてのクラスで、すべての obj c 関連のものを #ifdef に保持するか、ヘッダー ファイルで obj c をまったく公開しないようにする必要があります。

たとえば、ヘッダーで次の ifdef を使用できます。

#ifdef __OBJC__
     // Objective C / C++ code here
#endif

.h ファイルはヘッダーファイルと同様にインクルードされるため、実際にはインクルードされることに注意してください。目的の C コードを .cpp ファイルに含めると、コンパイラは混乱して泣きます。


編集: 覚えておくべき最も重要なことは、目的の c ヘッダー ファイル (または目的の c コードを含む他のファイル) が cpp ファイルから含まれていないことを確認する必要があることです。それができれば大丈夫です。

于 2012-09-08T03:20:04.330 に答える