2011-10-19 18 views
2

私はgui apiにクロスプラットフォームのクリップボードサポートを追加しようとしています。私はそれをWindows上でうまく動作させることができました。今はOSXを使用しています。CMake(Objective-CとC++を混在させたCake)でリンクするココアライブラリ

私が望むように機能していますが、ファイルは.mmです。したがって、私のguiのOSX版をコンパイルするとき、彼らは今、ココアのライブラリにリンクする必要があります。

誰かがcmakeを使ってC++とobjective-cを混在させているときに、どのようにココアにリンクする経験がありますか?

おかげ

答えて

3

あなたはGCCに渡すか、Objective Cのか、客観的C++アプリケーションのコンパイルを可能にするために打ち鳴らすためにいくつかのコンパイラスイッチがあります。

gcc -ObjC MySourceFile.m 
gcc -ObjC++ MySourceFile.mm 

clang -ObjC MySourceFile.m 
clang -ObjC++ MySourceFile.mm 

あなたはどのMacOSXののどの最小バージョンを指定しますあなたのアプリは次のオプションで実行できます:

gcc -ObjC++ -mmacosx-version-min=10.6 

あなたのアプリがSnow Leopardと互換性を持つようにする場合は10.6を指定してください。あなたはまた、彼らはに対してコンパイルするためにSDKのバージョンを知っているようにはgccや打ち鳴らすにSYSROOTオプションを渡す必要があります:

gcc -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk 

玩具

アーチオプションとして構築するためのアーキテクチャを指定
gcc -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 

リンカーldを別々に呼び出す場合は、sysrootlibオプションをldに渡す必要があります。動的にリンクされたライブラリを作成するには、dylibオプションをldに渡します。 dynamiclibをgccまたはclangに渡すと、これはldに渡されます。

gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 

あなたはgccとフレームワークの名前に、リンカオプションとして、フレームワークのオプションを渡すココアフレームワークにリンクするには:

gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -Wl,-framework,Cocoa 

あなたがC++標準ライブラリを使用している場合は、のようにすることを指定する必要があります

-Wl,stdc++ 

MacOSXの10.7にデプロイし、libcの++ C++標準ライブラリを使用することができ打ち鳴らすでコンパイルすると、リンカオプション。あなたは、コンパイラへとリンカへのオプション渡し:

-stdlib=libc++ -Wl,c++ 

だから、Cocoaフレームワークにリンクされているソースからのライブラリーを作製するために、あなたは、GCC

gcc -dynamiclib -ObjC++ -mmacosx-version-min=10.6 --sysroot=/Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -o MyLibrary.dylib -Wl,-framework,Cocoa MySourceFile.mm 

希望を使用して、次の操作を行いますこれは役に立ちます。

関連する問題