
Итак, у меня есть проект, который я хочу собрать как 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.0
cmake v.3.10.2
решение1
Хорошо, я выяснил, в чем проблема:
Когда я выяснил, что мне нужно использовать , g++-multilib
я пошел дальше и поискал это в моем менеджере пакетов ( synaptic
в моем случае). Он перечислил кучу версий, поэтому я проверил, какая версия у g++
меня установлена, а затем установил соответствующий g++-multilib
пакет, которым в моем случае был g++-7-multilib
.
Однако то, что он не установил, было gcc-multilib
пакетом, который, похоже, является источником проблем в моем случае. После его установки все заработало, как и ожидалось.
g++-multilib
Короче говоря: если бы я изначально установил пакет (без версии в названии), у меня бы не было этой проблемы.