Então eu tenho um projeto que eu quero poder construir como um binário de 64 bits, bem como um de 32 bits.
Minha máquina em si é de 64 bits e a compilação de 64 bits funciona muito bem.
Estou usando cake
para construir meu projeto e usei o set_target_properties(clib PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
para forçar uma compilação de 32 bits.
Sempre que tento construir isso o compilador lança um erro, pois estou incluindo <iostream>
no meu programa principal. No início, ele reclamou que não conseguia encontrar o <bits/c++config.h>
que está incluído em algum lugar dentro do <iostream>
.
Encontrei algumas coisas online que me levaram a instalar g++-multilib
no meu sistema. Agora, o erro anterior desapareceu, mas em vez disso estou recebendo o erro
/usr/include/linux/errno.h:1:10: fatal error: asm/errno.h: No such file or directory
que também tem suas origens no arquivo #include <iostream>
.
Verifiquei onde está esse arquivo e o encontrei, /usr/include/x86_64-linux-gnu/asm/errno.h
mas (como antes com a c++config.h
pasta x86_64
parece não ser pesquisada em uma compilação de 32 bits (o que meio que faz sentido).
Também encontrei em /usr/include/linux/errno.h
que é idêntico ao precioso, mas como você pode ver que não está na asm
subpasta.
Obviamente, eu poderia movê-lo manualmente para essa pasta, mas tenho a sensação de que há algo geralmente errado com minha configuração aqui.
Então, o que mais eu tenho que configurar para poder compilar meu código (com um #include <iostream>
) como um executável de 32 bits? Existe algo como uma versão de 32 bits da biblioteca std?
EDIT:
Estou usando o Linux Mint 18.3 com g++ --version
of g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
ecmake v.3.10.2
Tudo bem, descobri qual era o problema:
Quando descobri, tive que usar
g++-multilib
fui em frente e procurei por isso no meu gerenciador de pacotes (synaptic
no meu caso). Esse listou várias versões, então verifiquei qual versãog++
eu tinha instalado e instalei o pacote apropriadog++-multilib
que, no meu caso, era og++-7-multilib
.No entanto, o que não instalou foi o
gcc-multilib
pacote que parece ser o causador de problemas no meu caso. Depois de instalar esse, funcionou como esperado.Para encurtar a história: Se eu tivesse instalado o
g++-multilib
pacote (sem uma versão no nome) para começar, não teria esse problema.