“Cross Compilando” SQLite para Raspberry Pi

Postado em Atualizado em

Olá!

Continuando o aprendizado da raspberry pi, vi a necessidade de usar um banco de dados para armazenar configurações do sistema que estou projetando em C. Entre as opções de bancos, temos o Postgres, MySQL, Firebird, etc…. Entendo que são excelentes plataformas de manipulação de dados mas não preciso de tanto poder assim para minha aplicação que é bem simples (armazenar dados e configurações). Outro problema dessas plataformas é que possuem um monte de arquivos e dependências que são complicadas para gerenciar em um sistema de “cross compile” para a Raspberry Pi (Eu faço o desenvolvimento no meu Slackware/Eclipse e depois transfiro para o Raspberry através de SSH o executável… Tá… Já sei….)

Então, procurando uma solução, me lembrei do SQLite usado no Amarok do KDE… Então vi que o mesmo é usado em várias soluções embarcadas também por causa da praticidade e otimização do seu funcionamento.

Ao procurar mais detalhes; Entendi porque… Ele tem uma forma de organização conhecido como “amalgamation“que simplifica todo conjunto de arquivos em dois arquivos, um .c e outro .h. Mais detalhes: http://www.sqlite.org/howtocompile.html

Então, fiz meu main.c, adicionei as bibliotecas e PUF…. Olha o resultado:

Erro_sqlite
Erro na primeira compilação (Como se fosse novidade…)

Isso se deve a falta das bibliotecas pthread e dl que são bibliotecas usadas pelo SQLite. Para resolver esse problema temos dois caminhos:

  1. Retirar as bibliotecas “renegadas”;
  2. Compilar referenciando as bibliotecas, já que as mesmas estão disponíveis no toolchain padrão que uso para “cross compilação” que você pode encontrar a referencia em https://marcelommcouto.wordpress.com/2013/12/27/criando-um-ambiente-de-programacao-raspberry-pi/

Usando a primeira solução, temos a falta das seguintes facilidades que não serão incluídas na compilação do SQLite:

The pthreads library is needed to make SQLite threadsafe. But since the CLI is single threaded, we could instruct SQLite to build in a non-threadsafe mode and thereby omit the pthreads library. The -ldl library is needed to support dynamic loading, the sqlite3_load_extension() interface and the load_extension() SQL function. If these features are not required, then they can be omitted using SQLITE_OMIT_LOAD_EXTENSION compile-time option:

Ou seja, sem threads e o carregamento dinâmico de dados… Se para você não tem necessidade, adicione os #define em SQLite.c (sem estar comentado, claro!):

#define SQLITE_THREADSAFE 0
#define SQLITE_OMIT_LOAD_EXTENSION

sol_sqlite_1
Se você chegou aqui, você quer saber como fazer o segundo passo também e não perder nenhuma facilidade correto? Bom, para isso é só editar os parâmetros do compilador, indicando ao Eclipse onde procurar as bibliotecas faltantes (pthread e dl) em Libraries, lembrando que elas estão disponíveis na toolchain que uso para “cross compilação”:

sol_sqlite_3

Depois de escolher uma das opções, execute o build e se tudo estiver correto, teremos a tela abaixo:

Viram que escolhi a opção 2….😉

No mais, bom desenvolvimento na ótima plataforma Raspberry!

Até!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s