Monotouchを使用したSQLCipherを使う
-
13-11-2019 - |
質問
静的ライブラリをコンパイルし、SqlCipherとOpenSSLの両方をリンクしました。フルプロジェクト、メイクファイル、およびコンパイルされたライブラリはここにあります。
https://github.com/anujb/SQLCipherNet
.
通常のObjective-C Xcodeプロジェクトにあるライブラリをリンクすると、sqlite3_key
への呼び出しはうまく機能します。
同じライブラリを使ってMonotouchプロジェクトにリンクしました:
-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"
.
それからSQLite-Netを修正して、SQLite3.Open(...)
関数ごとにキー関数を呼び出すように変更しました:
[DllImport("__Internal", EntryPoint = "sqlite3_key")]
public static extern Result Key(IntPtr db, string key, int keyLength);
.
しかし、鍵方式が呼び出されたときに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
.
明らかに、石造りは特に役立ちませんが、この問題のデバッグを開始する場所については損失しています。HALP?
解決
「デバッグIPhonesimulator」のソリューションを構築するときに同じエラーが発生します。ただし、この構成のために、あなたのプロジェクトオプションは、 not を含めています。
「デバッグ| 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のために欠けていると思いますか?