14.04.01 32-разрядная версия: отсутствуют кросс-файлы g ++ для 64-разрядных файлов при кросс-компиляции

8

Итак, у меня установлен 32-битный Xubuntu 14.04.1. У нас есть некоторый интерфейсный код, в котором мы намереваемся выпустить SO для различных платформ, которые мы поддерживаем, и библиотеки Windows DLL. (Да, я знаю, бинарный релиз плох, но здесь тоже не актуален.)

Я пытаюсь создать 32-битные и 64-битные SO с 32-битными 14.04.01, используя аргументы -m32/ -m64gcc / g ++. 32-разрядная версия работает нормально, но 64-разрядная версия не работает с

/usr/include/c++/4.8/string:38:28: fatal error: bits/c++config.h: No such file or directory

При включении включается, что файл действительно присутствует для 32-разрядных, но отсутствует для 64-разрядных.

Погуглив проблему, похоже, это случалось в прошлом для GCC / G ++ 4.6, но затем помечалось как исправленное. Но 14.04.1 использует GCC / G ++ 4.8, что говорит о регрессии в этих библиотеках в GCC / G ++ 4.8. Это то, что кто-то еще видел?

Я мог бы при необходимости установить новую виртуальную машину для 64-битной 14.04.1 и посмотреть, подберут ли она правильные версии библиотеки. Я предпочел бы, если это возможно, потому что у меня есть куча других вещей, которые мне также придется переустанавливать. Есть ли лучшее решение? И если бы я установил 64-битную версию 14.04.1, смогу ли я кросс-компилировать обратно в 32-битную версию без пропущенных заголовков в другом направлении?

Грэхем
источник
... возможно, вам следует избегать упоминания вещей, которые "здесь не актуальны", так как они не актуальны.
mikewh независимо от
2
Вы установили g++-multilibпакет?
SteelDriver
@steeldriver Спасибо - это все! Похоже, что 64-битная установка имеет его по умолчанию, а 32-битная - нет. Хорошо, что-то еще, чтобы добавить в мой контрольный список "как настроить виртуальную машину сборки Linux". :) Это может показаться простым, но я не расценил это как ответ на вопросы других людей по той же ошибке компиляции, и я на самом деле не эксперт по Linux.
Грэм

Ответы:

9

Файл config.h для 64-битных бит / c ++ предоставляется в 32-битных системах (и наоборот) путем установки g++-multilibпакета, поэтому вам необходимо установить этот пакет либо с помощью Software Center, Synaptic, либо через терминал с помощью

sudo apt-get install g++-multilib

Это просто пакет зависимостей, который разрешается g++-4.8-multilibдля версии gcc / g ++ по умолчанию и, в свою очередь, зависит от lib64stdc++-4.8-dev(64-битная компиляция на 32-битной) или libx32stdc++-4.8-dev(32-битная компиляция на 64-битной) - это те, которые содержат фактические заголовочные файлы.

Существует эквивалентный набор пакетов для простого компилятора Си gcc.

steeldriver
источник
4
sudo apt-get install g++-5-multilibдостал мне ту версию, которая мне была нужна. Если это не работает для вас, примечание sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get updateтакже является частью моего конфига.
U007D