Использование SQLCipher с MonoTouch - PullRequest
       83

Использование SQLCipher с MonoTouch

2 голосов
/ 27 февраля 2012

Я скомпилировал статическую библиотеку и связал SQLCipher и OpenSSL. Полный проект, make-файл и скомпилированная библиотека могут быть найдены здесь:

https://github.com/anujb/SQLCipherNet

Когда я связываю полученную библиотеку в обычном проекте Xcode Objective-C, вызов 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);

Но я получаю EntryPointNotFoundException при вызове метода Key. Вот трассировка стека:

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

1 Ответ

2 голосов
/ 27 февраля 2012

Я получаю ту же ошибку при создании вашего решения для «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?

...