3

Aviary SDK Objective-C ライブラリを Monotouch プロジェクトに統合したいと考えています。これには「Monotouch Binding Project」テンプレートを使用します。そこで、API 定義ファイルを作成し、LinkWith 属性を定義しました。

[assembly: LinkWith ("libAviarySDK.a", LinkTarget = LinkTarget.ArmV6 | LinkTarget.ArmV7 | LinkTarget.Simulator, ForceLoad = true, IsCxx = true, Frameworks="CoreGraphics QuartzCore Accelerate StoreKit CoreData", LinkerFlags="-ObjC -all_load -fobjc-arc")]

次のライブラリが必要です。

  • Foundation.framework
  • UIKit.framework
  • CoreGraphics.framework
  • QuartzCore.framework
  • Accelerate.framework
  • StoreKit.framework
  • libz.1.2.5.dylib
  • libsqlite3.0.dylib
  • CoreData.framework

libsqlite3.0.dylib を除いて、これらのフレームワークはすべて問題なくリンクされています。

ただし、私が直面している問題は、ライブラリがlibsqlite3.0.dylibに依存しており、これらのフレームワークを MonoTouch アプリケーションに含める方法がわからないことです。

結果として、コンパイラは次のエラーを返します。

/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator.sdk/usr/lib -u _catch_exception_raise -force_load /var/folders/2n/ql7wkht57cg8wfgzz0cr9trm0000gn/T/tmp31d0b99b.tmp/libAviarySDK.a -ObjC -all_load -fobjc-arc

アーキテクチャ i386 の未定義シンボル:

「_sqlite3_open」、参照先: -[AFLocalyticsDatabase init] in libAviarySDK.a(AFLocalyticsDatabase.o)

「_sqlite3_busy_timeout」、参照先: -[AFLocalyticsDatabase init] in libAviarySDK.a(AFLocalyticsDatabase.o)

「_sqlite3_exec」、参照先: -[AFLocalyticsDatabase beginTransaction:] in libAviarySDK.a(AFLocalyticsDatabase.o)

*および他の多くの同じ参照*

ld: アーキテクチャ i386 のシンボルが見つかりません collect2: ld は 1 つの終了ステータスを返しました

mtouch はコード 1 で終了しました

4

1 に答える 1

6

(ネイティブ) リンカーに SQLite ライブラリ (およびシンボル) をロードするように指示するには、バインディング用に追加-lsqlite3.0してみてください。LinkerFlags

[assembly: LinkWith ("your_lib.a", LinkTarget.ArmV7, ForceLoad = true, LinkerFlags="-lsqlite3.0")]
于 2012-06-05T15:02:27.707 に答える