2

静的ライブラリをコンパイルし、SQLCipher と OpenSSL の両方をリンクしました。完全なプロジェクト、makefile、およびコンパイルされたライブラリは、次の場所にあります。

https://github.com/anujb/SQLCipherNet

結果のライブラリを通常の Objective-C Xcode プロジェクトにリンクすると、呼び出しは正常にsqlite3_key機能します。

以下を使用して、同じライブラリを MonoTouch プロジェクトにリンクしました。

-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"

SQLite3.Open(...)次に、すべての関数の後にキー関数を呼び出すように SQLite-NET を変更しました。

[DllImport("__Internal", EntryPoint = "sqlite3_key")]
public static extern Result Key(IntPtr db, string key, int keyLength);

しかし、Key メソッドが呼び出されると、EntryPointNotFoundException が発生します。スタック トレースは次のとおりです。

System.EntryPointNotFoundException has been thrown at:
at (wrapper managed-to-native) SQLite.SQLite3:Decrypt (intptr,string,int)
at SQLite.SQLiteConnection..ctor (System.String databasePath) [0x00031] in 
../SQLite.cs:108 

明らかに、スタック トレースは特に役に立ちませんが、この問題のデバッグをどこから開始すればよいか途方に暮れています。ハーフ?

4

1 に答える 1

2

「Debug|iPhoneSimulator」のソリューションをビルドするときに同じエラーが発生します。ただし、この構成のプロジェクトオプションには、言及したものが含まれていないgcc_flagsため、例外は完全に正常です。

「デバッグ| iPhone」構成(オプションが指定されている場所)を構築しようとすると、パスの問題が原因で失敗します...しかし、それらを修正すればうまくいくと確信しています;-)

アップデート

ライブラリを適切な場所に移動すると、次のようになります。

Undefined symbols for architecture armv6:   "___udivmodsi4",
referenced from:
      _sqlite3BitvecSet in libsqlciphernet.a(sqlite3.o)
      _sqlite3BitvecClear in libsqlciphernet.a(sqlite3.o)
      _sqlite3BitvecTest in libsqlciphernet.a(sqlite3.o) ld: symbol(s) not found for architecture armv6

libopenssl のために欠落していると思いますか?

于 2012-02-27T00:58:13.187 に答える