2011-09-14 15 views
2

XCodeでC++ライブラリをラップするにはいくつかの助けが必要です。XCodeでC++ライブラリをラップする

私が達成したいのは、XCodeで新しいライブラリを作成し、C++ライブラリ(私は.aと.hファイルがあります)をインポートし、Obj-CにラップしてそのライブラリをMonoTouchにインポートできるようにすることです。

私はそれを丸くする理由は、私がMonoTouchにC++のlibをインポートしようとすると、名前のマングリングのために私はWrongEntryPointの例外を受け取り続けます。私が間違っていれば私を訂正してください。しかし、コンパイラに依存する、名前の変更を見つける方法はありません。

は私が間違っているが、私は、コンパイラに依存マングルされた名前を、見つけるするための方法はありませんなら、私を修正して、事前

答えて

2

でいただきありがとうございます。

技術的に可能です。多くのコンパイラは同じmangling syntaxを共有しています;-)

しかし、C++を更新すると、それ自身の痛み(例えば、非プリミティブ型、その他のコンパイラ)とメンテナンスの問題が発生します。コード。

方が良いによって提供されます:

  • ObjectiveCラッパーを書いて、生成されたバインディングにMonoTouchでの btouchツールを使用します。

  • ラッパーを作成し、.NET p/invokeを使用してコードを呼び出します。

選択肢それあなたが、あなたが他の場所でC++/C#のコードを再利用を考えた場合(例えばモノAndroid用)、その後Cとp を使用/再利用可能になります起動します。

2

ライブラリをObj-Cライブラリにラップし、btouchを使用してライブラリをMonoTouchにインポートすることをお勧めします。私は最近、Sybaseデータベースエンジンを実装したC++ライブラリでこれを行っています。私の質問を見ると、遭遇した問題に関して数回ポストしたので、C++ライブラリをラッピングすることに関連するかなりの数が見つかります。

具体的に、あなたはこれらの質問を見ることができます:

Linking to a C++ native library in MonoTouch

Wrapping a C++ library in Objective-C is not hiding the C++ symbols

Application with static library runs on simulator but not on actual device

Undefined symbols when linking PhoneGap static library in MonoTouch

Linker options 'Link all assemblies" and "Link SDK assemblies only" causes undefined symbols in 3rd party static library

Obj-Cラッパーのルートに行く場合は、出力コードにbtouchを付け、btouchからdllをインクルードするのではなく、プロジェクトにインクルードすることをお勧めします。私の経験から、dllの問題は今解決されているかもしれませんが、コードはdllよりも確実に機能しました。しかしbtouch問題に関して、この質問を見てみましょう:

Exception System.InvalidCastException when calling a method bound with btouch that returns an object. MonoTouch bug?

あなたはここでそれらを尋ねると、いくつかのコードを投稿すると私は確信しているIまたはその後のObj-Cラッパーを構築する上での具体的な質問/問題がある場合コミュニティの他のメンバーがあなたを手伝うことができます。

1

あなたが想定したように、私はC++コードのラッピングに問題があります。何時間も何時間も読んで、試してみると、私はC++コードをラップできませんでした。

とにかく、ダミークラスで作られた単純なObj-Cライブラリを作成し、別のライブラリにインポートすることができました。それはうまくいった。しかし、同じパターンに従って、私はC++の.aファイルを.hファイルとともにインクルードしました(ビルドオプションでヘッダーファイルをリンクすることができるので、.hが必須かどうかはわかりません)、コンパイルしたらビルドは成功しましたが、XCodeは新しい.aライブラリを生成しませんでした。

リンカーフラグを追加しました:-ObjC -lNameOfLib C++標準ライブラリタイプはビルドにありますか?リンクはスタティックでなければなりませんか?デフォルトで隠されているシンボルも同様ですか?

さまざまな指示がたくさんあるので、ステップバイステップで書くことができれば幸いですが、私は最後までそれをプッシュできませんでした。

私は

が...

を皆さんありがとうございました。..少し混乱しています
関連する問題