2

J'ai compilé une bibliothèque statique et lié à la fois SQLCipher et OpenSSL. Le projet complet, makefile et bibliothèque compilée se trouvent ici:Utilisation de SQLCipher avec MonoTouch

https://github.com/anujb/SQLCipherNet 

Lorsque je lie la bibliothèque résultant d'un projet Objective-C Xcode normale, l'appel à sqlite3_key fonctionne très 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" 

J'ai modifié SQLite-NET pour appeler la fonction clé, après chaque fonction SQLite3.Open(...):

[DllImport("__Internal", EntryPoint = "sqlite3_key")] 
public static extern Result Key(IntPtr db, string key, int keyLength); 

Mais j'obtiens une exception EntryPointNotFoundException lorsque la méthode Key est appelée. Voici la trace de la 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 

Il est évident que le stacktrace est pas particulièrement utile, mais je suis à une perte à l'endroit où commencer à déboguer cette question. Halp?

Répondre

2

Je reçois la même erreur lors de la création de votre solution pour "Debug | iPhoneSimulator". Cependant, les options de votre projet, pour cette configuration, et non incluent le gcc_flags que vous avez mentionné - donc l'exception est tout à fait normale.

Essayer de construire le « Debug | iPhone » configuration (où les options sont spécifiées) échoue en raison de problèmes de chemin ... mais je suis sûr que ça marcherait si je les fixai ;-)

MISE à JOUR

Déplacement de la bibliothèque de son emplacement juste 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?

+0

Haha, erreur d'amateur! Fonctionne très bien lorsque j'ajuste les arguments de construction. Maintenant, j'ai juste besoin de documenter ce processus! – Anuj