e
quer mais?
Me paga um café! :) PIX consultoria@carlosdelfino.eti.br
Curta o post no final da página, use o Disqus, compartilhe em sua rede social. Isso me ajuda e motiva
Obrigado.
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.
Qualquer dúvida me informe nos comentários abaixo.
Clique aqui para a próxima etapa.
Não deixe de me pagar um café, faz um PIX: consultoria@carlosdelfino.eti.br de qualquer valor.
