2012-02-26 215 views
2

我編譯了一個靜態庫並鏈接了SQLCipher和OpenSSL。完整的項目,生成文件和編譯的庫可以在這裏找到:在MonoTouch中使用SQLCipher

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); 

但是,當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 

顯然堆棧跟蹤是不是特別有幫助,但我在虧損在何處開始調試這個問題。 HALP?

回答

2

構建「Debug | iPhoneSimulator」解決方案時出現相同的錯誤。但是,您的項目選項,對於此配置,請執行而不是,包括您提到的gcc_flags - 因此例外情況完全正常。

試圖建立「調試| iPhone」配置(其中指定的選項)失敗,因爲路徑的問題......但我敢肯定,如果我固定的他們來說,這會工作;-)

UPDATE

移動圖書館它是正確的位置給我:

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的?

+0

哈哈,業餘的錯誤!當我調整構建參數時效果很好。現在我只需要記錄這個過程! – Anuj 2012-02-27 01:25:52