
Portanto, tenho um projeto que desejo construir como um binário de 64 bits e também de 32 bits.
Minha máquina em si é de 64 bits e a compilação de 64 bits funciona perfeitamente.
Estou usando cake
para construir meu projeto e usei set_target_properties(clib PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
para forçar uma construção de 32 bits.
Sempre que tento construir isso, o compilador gera um erro, porque estou incluindo <iostream>
no meu programa principal. A princípio, ele reclamou que não conseguia encontrar <bits/c++config.h>
o que estava incluído em algum lugar dentro do arquivo <iostream>
.
Encontrei algumas coisas online que me levaram a instalar g++-multilib
no meu sistema. Agora o erro anterior desapareceu, mas 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 origem no arquivo #include <iostream>
.
Eu 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 ter sido pesquisada em uma compilação de 32 bits (o 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 errado com minha configuração aqui.
Então, o que mais preciso 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 Linux Mint 18.3 com g++ --version
eg++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
cmake v.3.10.2
Responder1
Tudo bem, descobri qual era o problema:
Quando descobri, tive que usar, g++-multilib
fui em frente e procurei no meu gerenciador de pacotes ( synaptic
no meu caso). Aquele listou um monte de versões, então eu verifiquei qual versão g++
eu tinha instalada e então instalei o g++-multilib
-package apropriado que no meu caso era o g++-7-multilib
.
No entanto, o que não foi instalado foi o gcc-multilib
pacote que parece ser o causador de problemas no meu caso. Depois de instalá-lo, funcionou conforme o esperado.
Resumindo: se eu tivesse instalado o g++-multilib
pacote (sem uma versão no nome) para começar, não teria esse problema.