Como configurar corretamente um ambiente de compilação cruzada para o Windows?

1

Estou trabalhando em um aplicativo escrito em C que deve rodar pelo menos em Linux e Windows. Eu costumo trabalhar no Linux, então gostaria de poder compilar meu aplicativo para Windows.

Minha configuração atual:

  • Debian GNU / Linux amd64
  • Nenhum sistema de compilação complexo, apenas um Makefile simples
  • Usando o GCC para Linux, MinGW para Windows

Meu aplicativo depende de várias bibliotecas. Felizmente, minha distribuição oferece cabeçalhos de desenvolvimento, então a compilação para o Linux funciona de forma bastante simples usando o pkg-config para determinar CFLAGS e LDFLAGS.

Não funciona tão bem para o Windows. Minha distribuição fornece um conjunto de ferramentas de compilador para x86_64-w64-mingw32, que é capaz de localizar os cabeçalhos de desenvolvimento, mas para algumas bibliotecas eu preciso de versões diferentes para o Windows. Infelizmente, essas versões não são fornecidas pela minha distribuição, então eu tenho que instalá-las sozinhas.

Então: Onde eu instalo os cabeçalhos de desenvolvimento do Windows? Como eu faço o pkg-config encontrá-lo? Existe uma maneira de compilar apenas para o Windows usando um único comando, assim como eu posso compilar para o Linux chamando make ?

No meu caso, uma das bibliotecas em questão é o SDL2. Tentar compilar com os cabeçalhos enviados pela minha distribuição produz um fatal error: iconv.h: No such file or directory . Pesquisando por esse erro também nos diz para usar a versão do Windows. Outras bibliotecas parecem funcionar durante o estágio de compilação, mas obviamente não podem encontrá-las durante o estágio de vinculação.

    
por secretpow 08.12.2015 / 16:40

1 resposta

1

Você deve criar qualquer biblioteca que queira usar com o conjunto de ferramentas x86_64-w64-mingw32 usando o prefixo /usr/x86_64-w64-mingw32 ; tipicamente:

./configure --prefix=/usr/x86_64-w64-mingw32 --host=x86_64-w64-mingw32

com outras opções de que você precisa.

Isso garantirá que os cabeçalhos acabem em /usr/x86_64-w64-mingw32/include , bibliotecas em /usr/x86_64-w64-mingw32/lib e pkg-config arquivos em /usr/x86_64-w64-mingw32/lib/pkgconfig , que é onde o conjunto de ferramentas espera encontrá-los.

Em relação a pkg-config , você deve verificar se as chamadas ./configure usam x86_64-w64-mingw32-pkg-config (o que deve acontecer automaticamente com a opção --host ). Você precisará instalar mingw-w64-tools se ainda não tiver feito isso.

(Eu sou o mantenedor mingw-w64 no Debian. Eu estaria interessado em qualquer feedback que você tivesse - em particular, eu tenho pensado em empacotar o Windows iconv por um tempo, e se isso teria salvado você vez eu vou empurrar isso mais acima na minha lista de afazeres.)

    
por 25.07.2018 / 11:07