2011-07-09 3 views
3

私はあなたの問題をはっきりと記述しようとしていますので、少し時間がかかるかもしれません。いくつかの提案を提供する。ありがとう。「.mm」ファイルを追加せずにobjective-C++をコンパイルするためのxCode 4の設定方法

私はライブラリープロジェクトを持っています。MyCppLibにレガシーC++コードが含まれています。このプロジェクトにアダプタークラスを追加して、他のプロジェクトでobjective-C++を使用して使用できるようにします。以下は、MyCppLibプロジェクトの概要です。

プロジェクトMyCppLib
- 一部のレガシーC++コード
- Adapter.h
- Adapter.mm私は別のプロジェクトを持っている

は、のは、MyCppLibを使用Mainプロジェクト、それを呼びましょう静的ライブラリとしてのプロジェクト。 xCode 4を使用してMyCppLibをコンパイルし、libMyCppLib.aを取得し、xCode 4にMainプロジェクトを設定してMainプロジェクトにリンクします。以下は、Mainプロジェクトの概要です。

プロジェクトメイン
- いくつかのObjective-Cクラスは含まれません'.mm' ファイル
- Adapter.h
- libMyCppLib.a 静的ライブラリとして

xCode 4のMainプロジェクトをコンパイルしているうちに、いくつかのエラーが発生します。

アーキテクチャARMv6用の

未定義のシンボル:
"new演算子(符号なしlong)"、から参照:
- [アダプタのinit] libMyCppLib.a(Adapter.o)で
:: CPP :: 名前空間 :: MyCppClass :: MyCppClass libMyCppLib.aで()(MyCppClass .o)は

... いくつかの他の同様のエラー

LD:記号(S)
collect2はARMv6のアーキテクチャが見つかりません:Mainプロジェクトはobjective-を持っていないので、ldは、私はそれがかもしれない把握

1つの終了ステータスを返しましたC++の機能を使用するため、Mainプロジェクトに '.mm'ファイルを追加します。そして今Mainプロジェクトは次のようにする必要があります:

プロジェクトメイン
- いくつかのObjective-Cクラスは含まれません'.mm' ファイル
- Adapter.h
- libMyCppLib DummyObjCpp.h
- -
静的ライブラリとしては.a DummyObjCpp.mm

次に、Mainプロジェクトをコンパイルし、が成功しました

最後に私の質問は、Mainプロジェクトに '.mm'ファイルを追加せずにobjective-C++機能を設定するにはどうすればいいですか?

答えて

6

OK、私は数回質問を読みましたが、私はまだ問題を理解しているかどうかはわかりません。

私はObjective-C、C++、Objective-C++で多大な努力をしてきましたが、静的ライブラリで記述したシナリオには遭遇していません(開発のほとんどはiOSではなくOS Xです動的ライブラリが許可され、優先される場所)。

2番目のプロジェクトに問題があるようですが、.hファイル自体が.aに含まれているものを十分に伝えないためです(つまり、残りの実行可能ファイルと組み合わせると、 libstdc++.dylibとリンクする必要があります)。あなたは下の画像のようにC++ headerからC headerのデフォルトからAdapter.hヘッダファイルの「ファイルの種類」を変更してみてください:

enter image description here

+5

またはリンクされたライブラリのリストにのlibstdC++ dylibを追加します。 –

+0

@NSGod貧しい私の英語については申し訳ありません。私はあなたにファイルタイプの変更を提案しましたが、それでも動作しません。しかしあなたの答えにも言及されている@Bavariousの解決策が働く!ありがとうございました – Tony

関連する問題