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

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

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

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

<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.h없는 것을 볼 수 있습니다 . 분명히 수동으로 해당 폴더로 이동할 수 있지만 일반적으로 설정에 문제가 있는 것 같습니다. asm

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

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

답변1

글쎄, 문제를 발견했습니다. 문제를 찾았을 때 패키지 관리자에서 계속 검색
해야 했습니다 ( 내 경우에는). 여기에는 여러 버전이 나열되어 있으므로 어떤 버전을 설치했는지 확인한 다음 적절한 패키지를 설치했습니다. 제 경우에는 . g++-multilibsynapticg++g++-multilibg++-7-multilib

그러나 설치되지 않은 것은 gcc-multilib내 경우 문제를 일으키는 것으로 보이는 패키지였습니다. 설치 후 예상대로 작동합니다.


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

관련 정보