Sem categoria

Sobrevivendo ao Windows Wilds

Quando comecei a desenvolver software, minha intenção sempre foi escrever software para Windows. Lembro que comprei o Borland C++ na livraria da faculdade e comecei a tentar me familiarizar com a API do Windows. Então, é claro, um amigo meu me contou sobre um novo sistema operacional chamado Linux. No fim de semana seguinte, passei horas baixando o Linux - todos os cerca de 26 disquetes no meu Packard Bell. Para resumir a história, estive imerso no mundo do Linux nos últimos 17 anos.

Mais recentemente, na NorthScale, quisemos adicionar suporte ao memcached - particularmente ao NorthScale Memcached Server - no Windows. Portanto, eu me familiarizei não apenas com o Windows, mas também com o compilador Mingw e com o ambiente Msys *NIX-like.

O Windows mudou muito desde a última vez em que o usei. Lembro-me dos dias em que era preciso ser hábil na edição de arquivos de configuração, como windows.ini, config.sys, autoexec.bat, especialmente para ajustar o gerenciamento de memória. Como usuário de UNIX, devo dizer que o Windows evoluiu muito. Principalmente as versões mais recentes do Windows. É interessante voltar para algo que você não usa há muito tempo, um pouco como sair de uma máquina do tempo.

Para criar o memcached, usamos o compilador cruzado Mingw. O que é o Mingw? Mingw é uma contração de "Minimalist GNU for Windows", o conjunto de compiladores GNU que inclui praticamente tudo o que você precisa para compilar executáveis do Windows. Além disso, é possível fazer a compilação cruzada de binários do Windows no Linux ou em outros *NIXs com o Mingw usando o mingw. Como temos algumas partes que são somente para Windows, realizamos nossas compilações no Windows.

Alguém pode se perguntar: por que não usar os compiladores da Microsoft? Isso se deve ao fato de o requisito e a meta do projeto de código-fonte do memcached ser aderir ao C99. Esse é um ponto sobre o qual notei que há alguns sentimentos fortes. Algumas pessoas afirmam que o C99 não é importante. Bem, para o memcached, ele é, então eu uso o que funciona para nossas necessidades. O outro requisito ou objetivo que tentamos alcançar é ter o menor número de alterações no código-fonte do memcached para facilitar o suporte ao Windows. Muitas vezes, e já vi isso em outros projetos, o código-fonte está repleto de complexidades ifdef pré-compiladoras. É isso que queremos evitar.

A outra parte dessa torta é o Msys. Msys é uma contração de "Minimal System" (sistema mínimo), ou seja, o conjunto mínimo de ferramentas que permite que você tenha um ambiente de linha de comando *NIX. Como usamos o Git como nossa ferramenta de gerenciamento de código-fonte, o projeto Msysgit tem não apenas um Msys mais atualizado, mas também o git empacotado. Além disso, para o Windows de 32 bits, o Msysgit já tem o Mingw incluído.

Configuração do Mingw e do Msys

Para configurar o Mingw e o Msys, depende se você usa o Windows de 64 bits ou de 32 bits. Para 32 bits, você pode instalar o Msysgit e ter tudo o que precisa. Para o Windows de 64 bits, você instala o Msysgit e, em seguida, instala a porta de 64 bits do Mingw, o Mingw-w64.

Instalação do Msysgit

O Msysgit pode ser encontrado em https://code.google.com/p/msysgit/. Para nossas necessidades, selecionamos o instalador executável "fullinstall". Após o download, basta executar o executável baixado. O instalador compilará o Msys em c:msysgitmsysgit. Uma vez instalado, a partir do bash, essa estrutura de diretório será /c/msysgit/msysgit, cujo caminho é o mesmo que /. Você notará que, ao instalar o Msysgit, o Git é compilado ao mesmo tempo e, por fim, é apresentada uma janela de terminal do shell bash. A primeira coisa que recomendo fazer é executar o script tcl (a partir da janela do terminal bash) para adicionar atalhos à área de trabalho e/ou ao menu:

/share/msysGit/add-shortcut.tcl

Isso exibirá as opções disponíveis para esse útil script.

Instalação do Mingw-w64

No Windows de 64 bits, você precisará instalar o mingw-w64. Você pode encontrar o arquivo compactado do Mingw-w64 em https://sourceforge.net/mingw-w64 mingw-w64-1.0-bin_i686-mingw_YYYYMMDD.zip. Extraia esse arquivo para C: (/c/).

Adição de caminhos ao seu sistema

Você precisará adicionar a variável de ambiente PATH para incluir o caminho para os binários e as bibliotecas do mingw e do msysgit. No Windows, as variáveis de ambiente usam %NAME%, por exemplo: %PATH%. Além disso, o caractere de separação de caminho no Windows é um ponto e vírgula, e não dois pontos. Para editar seu PATH, faça o seguinte:

Painel de controle ->
Sistema ->
Avançado ->
Variáveis de ambiente ->
Caminho (clique para editar)

Adicione o seguinte ao PATH existente:

c:mingwbin;c:msysgitmsysgitbin;c:msysgitmsysgitlocalbin;c:msysgitmsysgitmingwbin;

Outro aspecto a saber no Windows é que o caminho de carregamento da biblioteca é simplesmente %PATH% ($PATH).

Compilação de código com o Mingw

Nesse ponto, você deverá ter um sistema funcional, suficiente para compilar códigos e produzir executáveis do Windows. Além disso, você poderá trabalhar em seu sistema Windows usando as ferramentas *NIX que conhece e adora!

Para compilar código no win32, basta executar as compilações da mesma forma que você faz no Linux. Veja, por exemplo, a biblioteca de rede Libevent. Para compilar no win32 (Msysgit), basta:

./configure
fazer
fazer instalação

No entanto, no caso do win64, como você tem o mingw-w64 instalado, é necessário especificar alguns sinalizadores ao executar o configure:

./configure -host=x86_64-w64-mingw32 -build=i686-pc-mingw32 -prefix=/usr

fazer

Esses sinalizadores garantem que você obtenha bibliotecas e executáveis de 64 bits. Depois de executar o make, você compilará linhas como:

/bin/sh ./libtool -tag=CC -mode=compile x86_64-w64-mingw32-gcc -DHAVE_CONFIG_H -I. -I./compat -I
./include -IWIN32-Code -g -O2 -Wall -fno-strict-aliasing -MT select.lo -MD -MP -MF .deps/select.T
po -c -o select.lo select.c

Se você observar o diretório de executáveis do Mingw-w64, /c/mingw/bin, verá por que a especificação dos sinalizadores é necessária - todos os binários são prefixados com "compile x86_64-w64-mingw32". Especificando as opções -host e -build, os executáveis corretos do compilador são usados, garantindo a arquitetura adequada.

Para alguns outros programas que não têm a conveniência do script configure, você pode usar o CROSS fornecido para o make:

CROSS=x86_64-w64-mingw32-

Isso garantirá o uso dos binários adequados do compilador e do vinculador.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Patrick Galbraith

Patrick Galbraith é engenheiro de software da Couchbase. Seu trabalho é fazer P&D, prototipagem e desenvolvimento de sistemas de construção de produtos Linux e Windows.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.