Usando SQLCipher con Monoutouch
-
13-11-2019 - |
Domanda
Ho compilato una biblioteca statica e collegata sia SQLCipher che OpenSSL.Il progetto completo, Makefile e Biblioteca compilata sono disponibili qui:
https://github.com/anujb/SQLCipherNet
.
Quando collego la libreria risultante in un normale progetto Objective-C Xcode, la chiamata a sqlite3_key
funziona bene.
Ho collegato la stessa libreria in un progetto Monotouch usando:
-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"
.
Allora ho modificato SQLite-Net per chiamare la funzione chiave, dopo ogni funzione SQLite3.Open(...)
:
[DllImport("__Internal", EntryPoint = "sqlite3_key")]
public static extern Result Key(IntPtr db, string key, int keyLength);
.
Ma ottengo un entrypointnotfoundexception quando viene chiamato il metodo chiave.Ecco la traccia dello stack:
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
.
Ovviamente lo stacktrace non è particolarmente utile, ma sono in perdita da dove cominciare a eseguire il debug di questo problema.Halp?
Soluzione
ottengo lo stesso errore durante la creazione della soluzione per "debug | iPhonesimulator".Tuttavia le opzioni di progetto, per questa configurazione, fai non includono il gcc_flags
che hai menzionato, quindi l'eccezione è totalmente normale.
Cercando di costruire la configurazione "Debug | iPhone" (dove vengono specificate le opzioni) non riescono a causa dei problemi del percorso ... ma sono abbastanza sicuro che funzionerà se li risolto; -)
Aggiornamento
Spostamento della biblioteca nella posizione giusta mi dà:
.
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
credo che sia mancato a causa della libopenssl?