/ / Boost - cross compile - “do Linux” “para o Windows” - c ++, boost, compilação

Boost - cross compile - “do Linux” “para o Windows” - c ++, boost, compilação

Eu baixei "boost" (1.40.0) código fonte de sua homepage "www.boost.org". Eu tenho Linux (Ubuntu 9.04 desenvolto) instalado e tentando compilar as bibliotecas de impulso para a versão "WINDOWS" (por exemplo, ".dll", não ".so") da minha máquina "LINUX".

E agora uma questão importante:

É POSSÍVEL COMPILAR AS BIBLIOTECAS DE IMPULSO DE "WINDOWS" DE "LINUX" (se alguém disser "sim", só confiarei nele se elejá fiz isso antes de escrever aqui uma solução que funcionará para mim. Desculpe por esse pessimismo, mas eu estou tentando fazer isso por 3 dias e nada de positivo até agora)?

Até agora tenho compilado programas em c ++ dessa maneira. Para compilar do Linux para o Linux, usei o compilador "gcc" (ou "g ++"). Para compilar do Linux para o Windows eu usei o compilador "i586-mingw32msvc-gcc" (ou "i568-mingw32msvc-g ++") (que está contido no pacote "mingw32" para "Ubuntu", por exemplo).

Então, essa estratégia que eu queria usar também para compilar bibliotecas de reforço e eu tentei isso até agora (depois de ler o artigo "Introdução" na página inicial de reforço):

--1. Eu executei "bootstrap.sh" do diretório de código-fonte do boost "root":

./bootstrap.sh

--2. Então eu mudei uma coisa no arquivo "project-config.jam" (de "using gcc;"):

using gcc : : i586-mingw32msvc-gcc ;

--3. E finalmente execute o executável "bjam":

./bjam stage

Mas em vez de criar a versão "Windows" das bibliotecas de reforço, recebi muitas mensagens de erro.

Alguém pode me ajudar?

Desde já, obrigado.

Petike

Respostas:

10 para resposta № 1

A documentação oficial tem uma seção sobre compilação cruzada. Comparando isso com o que você está fazendo, há dois problemas:

  1. Você especifica i586-mingw32msvc-gcc e deve especificar i586-mingw32msvc-g ++. O primeiro é um compilador C, que é um pouco difícil de usar para compilar a base de código do C ++ ;-)

  2. Você precisa de target-os = windows

Note que há um bug conhecido lá - ao criar estático bibliotecas, elas não são passadas via ranlib, e o mingw linker está especificamente chateado com isso. Você teria que executar o ranlib manualmente se planeja usar bibliotecas estáticas.


3 para resposta № 2

Há um procedimento muito simples a seguir para cruzar o reforço de builds do linux para o windows aqui:

https://web.archive.org/web/20110604002004/http://www.vle-project.org/wiki/Cross_compilation_Win32


2 para resposta № 3

Esses são os comandos que eu uso. Eu testei-os para o impulso 1.46 e 1.49.

Para começar, crie links para o compilador dentro de / usr / i686-w64-mingw32 / bin. Você pode executar este script:

#!/bin/bash

binDir="/usr/bin"
destDir="/usr/i686-w64-mingw32/bin"

cd "$binDir"
mkdir -p "$destDir"

for name in $(ls i686-w64-mingw32*); do
newName=$(echo "$name" | sed "s/i686-w64-mingw32-//g")
if [ -f "$destDir/$newName" ]; then
rm "$destDir/$newName"
fi
ln -s "$binDir/$name" "$destDir/$newName"
done

Então, instale bjam. No ubuntu / debian, está incluído no pacote "libboost1.48-dev"

apt-get install libboost1.48-dev

Para terminar, torne-se root e execute

env PATH=/usr/i686-w64-mingw32/bin:$PATH bjam toolset=gcc target-os=windows variant=release threading=multi threadapi=win32 link=static --prefix=/usr/i686-w64-mingw32 -j 4 --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged install

Feito !


0 para a resposta № 4

Boost faz suposições sobre seu sistema operacional e atualconstruir com base no seu sistema atual. E se você obtivesse os arquivos de cabeçalho do win32, removesse todos os cabeçalhos do Linux do caminho de inclusão e tentasse criar?


0 para a resposta № 5

Isto não é realmente uma resposta, mas: não!

Cross compilação para uma plataforma completamente diferente é geralmente uma enorme dor no pênis.

Se você estiver tentando construir os binários do Windows na mesma máquina, por exemplo, para empacotamento, use uma máquina virtual com windows, mingw e scripts apropriados.

Então você pode até mesmo executar testes automatizados na vm etc. com a sua compilação, o que deve ser uma grande vantagem.