quinta-feira, 12 de janeiro de 2017

Ambiente Windows Code::Blocks + Mingw + wxWidgets

Ambiente de instalação

A instalação foi realizada num notebook rodando Windows 7 32bits. A intenção é ter um ambiente para programas em C++ para captura, processamento e envio de pacotes de dados através das interfaces Ethernet ou Wi-fi do notebook usando o Winpcap. Para facilitar a criação das interface gráficas, será utilizado wxWidgets como ferramenta.

Download dos arquivos de instalação

  1. Code::Blocks e Mingw
    No momento em que escrevo, estão disponíveis em [1]. Utilizar o instalador que, além do Code::Blocks, também instala o Mingw juntos (isso poupa tempo);
  2. wxWidgets
    No momento em que escrevo, está disponível a versão 3.1 em [2]. Entretanto, a versão utilizada foi a 3.0.2 por eu já ter realizado algumas coisas com essa versão;
  3. WinPcap
    Baixar o WinPcap10 em [3];
    Baixar o Developer Pack do WinPcap. No momento em que escrevo, a versão disponível é a 4.1.2 em [4];

Instalação dos programas

  1.  Code::Blocks e Mingw
    Siga as instruções do instalador e não esqueça de deixar marcado a instalação do "MinGW Compiler". Ao executar o Code::Blocks, ele irá rodar a auto-detecção de compilador automaticamente e ao seu término, apontar para o "GNU GCC Compiler";
  2. wxWidgets
    Siga as intruções do instalador. Eu preferi instalar o wxWidgets na raiz do disco "C:\wxWidgets-3.0.2";
  3. WinPcap
    Instalar o WinPcap10 de seguindo as instruções acordo com o instalador;
    Decompactar o arquivo zip do WinPcap devel na raíz do disco (preferi fazer assim para não introduzir espaços nem caracteres estranhos no path para as bibliotecas).

Configurações do ambiente

  1. Inclua no path do Windows o caminho para a pasta bin do MingW. Isso vai facilitar o acesso as binários dos executáveis do MingW para a compilação do wxWidgets. No Windows 7, o caminho para chegar no local onde se faz essa definição é: Painel de Controle -> Sistema -> Configurações Avançadas de Sistema -> Clicar na aba "Avançado" -> Botão "Variáveis de Ambiente".
    Dentro da listagem das Variáveis de Sistema, procurar por "Path" e editar esse conteúdo adicionando o caminho para a pasta "bin" do MingW (no meu caso, "C:\Program Files (x86)\CodeBlocks\MinGW\bin"), seguido de ponto e vírgula no final. No meu caso, o path ficou assim:
    C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files\doxygen\bin;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\CodeBlocks\MinGW\bin;

    Faça um teste abrindo um terminal (Clique em Iniciar->Executar, digite "cmd" e dê ENTER), e verificando a versão do gcc através de "gcc -v". Se o path foi colocado corretamente será exibido a versão do gcc que está instalado junto com o MingW.
  2. Para a compilação do wxWidgets, siga os seguintes passos:

    • Abra um terminal, e vá para o diretório "../build/msw" da sua instalação (no meu caso foi o caminho "C:\wxWidgets-3.0.2\build\msw");
    • Preferi compilar o meu conforme abaixo, mas outras opções estão disponíveis. Para informações, ver [5]. Lembrando que meu Windows 7 é para 32 bits.

      mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug USE_XRC=1 USE_OPENGL=1 CXXFLAGS="-std=gnu++11"
    • Tenha paciência, a compilação demora um pouco. Eu tinha uma dúvida em relação a usar build release ou debug, eu achava que haveria diferença de performance. Entretanto, achei essa discussão [6] onde uma pessoa explica que não há diferença. Outra fonte de informações sobre a compilação em Windows pode ser vista em [7];

Novo Projeto 

  1. Abra o Code::Blocks e  crie um novo Projeto usando o wxWidgets. Na primeira vez, será solicitado criar uma variável de ambiente "$(#wx)" para apontar o local onde estão estalados os arquivos. Sugiro usar esse recurso ao invés de apontar diretamente o local. No meu caso, o endereço base ficou "C:\wxWidgets-3.0.2", o endereço para "lib" e "include" ficaram as respectivas subpastas desse endereço base;
  2. Vá em Project > Build Options e marque a opção "-std=c++11"

Referências

[1] http://www.codeblocks.org/downloads/26#windows
[2] https://www.wxwidgets.org/downloads/
[3] http://www.win10pcap.org/
[4] http://www.winpcap.org/devel.htm 
[5] https://wiki.wxwidgets.org/WxWidgets_Build_Configurations
[6] http://stackoverflow.com/questions/11883074/what-does-mean-by-debug-build-and-release-build-difference-and-uses
[7] http://forums.codeblocks.org/index.php/topic,20607.120.html

Um comentário: