El uso de SQLCipher con MonoTouch
-
13-11-2019 - |
Pregunta
He compilado una biblioteca estática y se vinculan tanto SQLCipher y OpenSSL.El proyecto completo, makefile, y el compilado de la biblioteca se puede encontrar aquí:
https://github.com/anujb/SQLCipherNet
Al vincular la biblioteca resultante en una normal Objective-C, Xcode proyecto, la llamada a sqlite3_key
funciona bien.
Yo me he vinculado la misma biblioteca en un MonoTouch proyecto a través de:
-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"
Luego he modificado SQLite-NET para llamar a la función de la tecla, después de cada SQLite3.Open(...)
función:
[DllImport("__Internal", EntryPoint = "sqlite3_key")]
public static extern Result Key(IntPtr db, string key, int keyLength);
Pero tengo un EntryPointNotFoundException cuando la Clave del método es llamado.Aquí está el seguimiento de la pila:
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
Obviamente el stacktrace no es particularmente útil, pero estoy en una pérdida en cuanto a por dónde empezar a depurar este problema.Halp?
Solución
Me sale el mismo error cuando la construcción de su solución para "Depurar|iPhoneSimulator".Sin embargo, sus opciones de proyecto, para esta configuración, hacer no incluir la gcc_flags
usted ha mencionado - por lo que la excepción es totalmente normal.
Tratando de construir la "Depuración|iPhone" configuración (donde se especifican las opciones) se produce un error debido a la ruta de los problemas...pero estoy bastante seguro de que funcionaría si me fijo en ellos ;-)
ACTUALIZACIÓN
La mudanza de la biblioteca para que el derecho de la ubicación me da:
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
Yo creo que lo que falta porque de libopenssl ?