C++ Сборка 32-битного двоичного файла на 64-битной системе

C++ Сборка 32-битного двоичного файла на 64-битной системе

Итак, у меня есть проект, который я хочу собрать как 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но (как и раньше с c++config.hпапкой x86_64, похоже, не ведется поиск в 32-битной сборке (что в общем-то имеет смысл).
Я также нашел его в , /usr/include/linux/errno.hкоторый идентичен драгоценному, но, как вы можете видеть, его нет в asmподпапке.
Очевидно, я мог бы вручную переместить его в эту папку, но у меня такое чувство, что с моей настройкой здесь что-то не так.

Так что еще мне нужно настроить, чтобы я мог скомпилировать свой код (с #include <iostream>) как 32-битный исполняемый файл? Есть ли что-то вроде 32-битной версии std-library?

EDIT:
Я использую Linux Mint 18.3 с 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Короче говоря: если бы я изначально установил пакет (без версии в названии), у меня бы не было этой проблемы.

Связанный контент