Vamos neste passo, compilar nossa primeira biblioteca a LIBFFI responsável por permitir que haja interações entre funções em uma linguagem com outra, isso é expresso pelo seu nome FFI - Foreing Function Interface.

Antes de continuarmos gostaria de esclarecer minha escolha em apresentar tais passos em detrimento de usar um script pronto, inclusive o projeto do Liviu tem um excelente script. A escolha é puramente didatica, pois o aluno seguindo estes passos tem a oportunidade de interagir com o processo completo de construção de uma aplicação e sua compilação sem usar a IDE, interagindo com cada comando e tendo a oportunidade de se aprofundar no proposito de cada um deles.

Para que a Biblioteca libFFI

A biblioteca FFI é importante para integração do QEMU com outras linguagens, para quem é do Java, vai perceber uma certa semelhando com o propósito do JNI.

Tal biblioteca permite interagir por exemplo a linguagem Python com a maquina virtual, permitindo desenvolver softwares que interajam com outros aplicativos que rodem internamente ao emulador.

Para conhecer mais sobre a biblioteca libFFI visite o site https://sourceware.org/libffi/.

A LibFFI está tambem no GitHub e pode ser acessada pelo link https://github.com/libffi/libffi

Compilando a Biblioteca libffi

O comando abaixo irá atualizar o submodulo criado para que seja usado o respositório e branch correto. Estude um pouco do git para comprender melhor como funciona os submódulos.

~/qemu-delifno/ $ git submodule update libffi --depth=1

Se ainda não colocou o o python e o GCC que estamos usando no path, faça isso usando o seguinte comando no shell do Msys2:

~/qemu-delfino/ $ PATH=$PATH:/c/Python27:/c/Python27/DLLs
~/qemu-delfino/ $ PATH=$PATH:/mingw64/bin/
~/qemu-delfino/ $ export PATH

Abaixo definimos que o compilador C será x86_64-w64-mingw32-gcc e o compilador C++ será x86_64-w64-mingw32-g++

~/qemu-delfino/ $ export CC=x86_64-w64-mingw32-gcc 
~/qemu-delfino/ $ export CXX=x86_64-w64-mingw32-g++

Agora vamos compilar o projeto. Irei descrever cada conjunto de comandos detalhadamente, mas não farei isso em todos os passos, pois pode ficar repetitivo.

~/qemu-delifno/ $ mkdir build

A pasta build será nossa pasta de trabalho, quase todas as compilações serão feitas nela, portanto se algo der errado basta remove-la e começar de novo.

Dentro desta pasta serão criadas uma pasta para cada projeto quando for o caso.

Abaixo executo o autogen.sh que irá atualizra algumas informações de compilação. Uteis para uso no comando configure.

~/qemu-delifno/libffi $ ./autogen.sh

Em seguida devemos mudar de diretório para o de trabalho, e criaremos uma subpasta chamada libffi onde iremos rodar os comandos de compilação.

~/qemu-delifno/libffi $ cd ..
~/qemu-delifno/ $ cd build
~/qemu-delifno/build $ mkdir libffi
~/qemu-delifno/build $ cd libffi

E a seguir o comando configure, que irá fazer a checagem de dependências e parametrização do arquivo Makefile que será usado pelo comando make para gerar nossa biblioteca.

~/qemu-delifno/build/libffi $ ../../libffi/configure \
                    --prefix /mingw64 \
                    --build=x86_64-w64-mingw32 \
					--disable-docs

No comando configure acima faremos a configuração da compilação. A diretiva --prefix informa que a instalação será feita na pasta /mingw64, você pode mudar isso caso queira criar uma pasta especial para o QEMU, por exemplo /mingw64/qemu, mas pode haver efeitos colatarais com relação a carga de bibliotecas dinamicas, por hora vamos deixar como está.

Além disso, desabilitei também através da diretiva --diable-docs a geração de documentos, assim economizamos tempo e problemas com a instalação da ferramenta makeinfo.

Finalmente podemos compilar e instalar com os dois comandos a seguir:

~/qemu-delfino/build/libffi $ make
~/qemu-delfino/build/libffi $ make install

Não deverá ser apresentada nenhuma mensagem de erro.

A seguir o video do processo sendo executado por mim.

video apresentando o processo de compilação da biblioteca libFFI

Qualquer dúvida me informe nos comentários abaixo.

Clique aqui para a próxima etapa.


Carlos Delfino

Escrito por:

Analista de Redes Windows e Linux, Analista de Desenvolvimento em diversas linguagens, incluindo para Microcontroladores, Consultor, mais de 20 anos de experiência no mercado de TICs

Google LinkedIn Digg Reddit StumbleUpon

Atualizado em