14.04.01 32 bits: arquivos g ++ de 64 bits ausentes na compilação cruzada

8

Então, eu tenho o Xubuntu 14.04.1 de 32 bits instalado. Temos algum código de interface em que pretendemos liberar SOs para as várias plataformas suportadas e DLLs do Windows. (Sim, eu sei, versão binária ruim, mas também não relevante aqui.)

Estou tentando criar SOs de 32 e 64 bits com 14.04.01 de 32 bits, usando argumentos -m32/ -m64gcc / g ++. A versão de 32 bits funciona bem, mas a versão de 64 bits falha com

/usr/include/c++/4.8/string:38:28: fatal error: bits/c++config.h: No such file or directory

Ao fazer check-in, o arquivo está realmente presente para 32 bits, mas está ausente para 64 bits.

Pesquisando o problema, isso parece ter acontecido no passado para o GCC / G ++ 4.6, mas é marcado como corrigido. Mas o 14.04.1 está usando o GCC / G ++ 4.8, o que sugere que houve uma regressão nessas bibliotecas no GCC / G ++ 4.8. Isso é algo que mais alguém viu?

Eu poderia configurar uma nova VM para o 14.04.1 de 64 bits, se necessário, e ver se isso pegaria as versões corretas da biblioteca. Prefiro não, se possível, porque tenho um monte de outras coisas que eu teria que reinstalar também. Existe uma solução melhor? E se eu instalasse o 14.04.1 de 64 bits, seria definitivamente capaz de compilar de volta para 32 bits sem perder cabeçalhos na outra direção?

Graham
fonte
... talvez você deva evitar mencionar coisas que "não são relevantes aqui", pois não são relevantes.
Mikewhatever
2
Você instalou o g++-multilibpacote?
Steeldiver
@steeldriver Obrigado - foi isso! Parece que a instalação de 64 bits possui por padrão, mas a instalação de 32 bits não. OK, outra coisa a acrescentar à minha lista de verificação "como configurar uma VM de compilação do Linux". :) Pode parecer básico, mas não achei isso como resposta nas perguntas de outras pessoas para o mesmo erro de compilação, e não sou realmente um especialista em Linux.
Graham

Respostas:

9

O arquivo de 64 bits / c ++ config.h é fornecido em sistemas de 32 bits (e vice-versa) instalando o g++-multilibpacote; portanto, você precisa instalá-lo usando o Software Center, Synaptic ou através do terminal usando

sudo apt-get install g++-multilib

Este é apenas um pacote de dependência que resolve g++-4.8-multilibpara a versão padrão gcc / g ++ e, por sua vez, depende de lib64stdc++-4.8-dev(compilação de 64 bits em 32 bits) ou libx32stdc++-4.8-dev(compilação de 32 bits em 64 bits) - são estes que contêm o arquivos de cabeçalho reais.

Há um conjunto equivalente de pacotes para o compilador C simples gcc.

chave de aço
fonte
4
sudo apt-get install g++-5-multilibme deu a versão que eu precisava. Se isso não funcionar para você, note sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get updatetambém faz parte da minha configuração.
U007D