Utilisation de sqlcipher avec monotouch
-
13-11-2019 - |
Question
J'ai compilé une bibliothèque statique et lié à la fois SqlciPher et OpenSSL. Le projet complet, le makefile et la bibliothèque compilés sont disponibles ici:
https://github.com/anujb/SQLCipherNet
Lorsque je lie la bibliothèque résultante dans un projet Xcode objectif-C normal, l'appel à sqlite3_key
fonctionne bien.
J'ai lié la même bibliothèque dans un projet Monotouch en utilisant:
-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"
Ensuite, j'ai modifié Sqlite-Net pour appeler la fonction clé, après chaque SQLite3.Open(...)
fonction:
[DllImport("__Internal", EntryPoint = "sqlite3_key")]
public static extern Result Key(IntPtr db, string key, int keyLength);
Mais j'obtiens une entréepointNotFoundException lorsque la méthode clé est appelée. Voici la trace de pile:
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
De toute évidence, le StackTrace n'est pas particulièrement utile, mais je suis à court de savoir où commencer à déboguer cette question. Halp?
La solution
J'obtiens la même erreur lors de la création de votre solution pour "Debug | iPhonesimulator". Cependant, vos options de projet, pour cette configuration, font ne pas inclure le gcc_flags
Vous avez mentionné - l'exception est donc totalement normale.
Essayer de construire la configuration "Debug | iPhone" (où les options sont spécifiées) échoue à cause des problèmes de chemin ... mais je suis presque sûr que cela fonctionnerait si je les réparais ;-)
METTRE À JOUR
Déplacer la bibliothèque vers son bon endroit me donne:
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
Je crois qu'il manque à cause de LiboPenssl?