Pergunta

Compilei uma biblioteca estática e vinculei SQLCipher e OpenSSL.O projeto completo, makefile e biblioteca compilada podem ser encontrados aqui:

https://github.com/anujb/SQLCipherNet

Quando vinculo a biblioteca resultante em um projeto normal do Objective-C Xcode, a chamada para sqlite3_key funciona bem.

Vinculei a mesma biblioteca a um projeto MonoTouch usando:

-gcc_flags "-L${ProjectDir} -lsqlciphernet -force_load ${ProjectDir}/libsqlciphernet.a"

Então modifiquei o SQLite-NET para chamar a função chave, após cada SQLite3.Open(...) função:

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

Mas recebo uma EntryPointNotFoundException quando o método Key é chamado.Aqui está o rastreamento de pilha:

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, o stacktrace não é particularmente útil, mas não sei por onde começar a depurar esse problema.Meio?

Foi útil?

Solução

Recebo o mesmo erro ao criar sua solução para "Debug|iPhoneSimulator".No entanto, as opções do seu projeto, para esta configuração, não não incluir o gcc_flags você mencionou - então a exceção é totalmente normal.

A tentativa de construir a configuração "Debug|iPhone" (onde as opções são especificadas) falha devido a problemas de caminho...mas tenho certeza que funcionaria se eu os consertasse ;-)

ATUALIZAR

Mover a biblioteca para o local correto me 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

Acredito que esteja faltando por causa do libopenssl?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top