64비트 시스템에서 C++ 빌드 32비트 바이너리

64비트 시스템에서 C++ 빌드 32비트 바이너리

그래서 32비트 바이너리뿐만 아니라 64비트 바이너리로도 빌드할 수 있는 프로젝트가 있습니다.
내 컴퓨터 자체는 64비트이고 64비트 컴파일은 잘 작동합니다.

나는 내 프로젝트를 빌드하는 데 를 사용하고 있으며 32비트 빌드를 강제로 cake사용했습니다 .set_target_properties(clib PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")

내가 이것을 빌드하려고 할 때마다 컴파일러는 오류를 던집니다. 왜냐하면 내가 <iostream>메인 프로그램에 포함시키고 있기 때문입니다. 처음에는 <bits/c++config.h>내부 어딘가에 포함된 항목을 찾을 수 없다고 불평했습니다 <iostream>. 온라인에서 몇 가지를 발견하여 내 시스템에
설치하게 되었습니다 . 이제 이전 오류 는 g++-multilib사라졌지만 대신 . /usr/include/linux/errno.h:1:10: fatal error: asm/errno.h: No such file or directory#include <iostream>

이 파일이 어디에 있는지 확인하고 찾았 /usr/include/x86_64-linux-gnu/asm/errno.h지만(이전과 마찬가지로 32비트 빌드에서는 폴더가 검색되지 않는 것 같습니다(이건 말이 됩니다). c++config.h또한 귀중한 파일과 동일한 파일을 찾았지만 하위 폴더 에 없는 것을 볼 수 있습니다 . 분명히 수동으로 해당 폴더로 이동할 수 있지만 여기 설정에 일반적으로 문제가 있는 것 같습니다. x86_64
/usr/include/linux/errno.hasm

#include <iostream>그렇다면 내 코드( 를 사용하여 )를 32비트 실행 파일로 컴파일하려면 무엇을 더 설정해야 합니까 ? 표준 라이브러리의 32비트 버전과 같은 것이 있습니까?

편집:
저는 Linux Mint 18.3을 and와 g++ --version함께 사용하고 있습니다.g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0cmake v.3.10.2

답변1

좋아, 문제가 무엇인지 알아냈습니다. 문제가 무엇인지
알았을 때 g++-multilib패키지 관리자에서 해당 문제를 검색해야 했습니다( synaptic내 경우에는). 그 버전에는 여러 버전이 나열되어 있으므로 어떤 버전을 g++설치했는지 확인한 다음 적절한 g++-multilib패키지를 설치했는데 제 경우에는 g++-7-multilib.

gcc-multilib그러나 제 경우에는 문제를 일으키는 것으로 보이는 패키지가 설치되지 않았습니다 . 설치한 후 예상대로 작동했습니다.


간단히 말해서: 처음부터 (이름에 버전 없이) 패키지를 설치했다면 g++-multilib이 문제가 발생하지 않았을 것입니다.

관련 정보