我编译了一个静态库并链接了 SQLCipher 和 OpenSSL。完整的项目、makefile 和编译的库可以在这里找到:
https://github.com/anujb/SQLCipherNet
当我将生成的库链接到普通的 Objective-C Xcode 项目中时,对的调用sqlite3_key
工作正常。
我已经使用以下方法将同一个库链接到 MonoTouch 项目中:
-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"
然后我修改了 SQLite-NET 来调用 key 函数,在每个SQLite3.Open(...)
函数之后:
[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
显然堆栈跟踪并不是特别有用,但我不知道从哪里开始调试这个问题。哈普?