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


8

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

Я намагаюся створити 32-розрядні та 64-бітні SOs з 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 відбувся регрес. Це щось таке, що хтось ще бачив?

Я міг би встановити новий VM для 64-розрядних 14.04.1, якщо це необхідно, і побачити, чи підбирає це правильну версію бібліотеки. Я хотів би не скоріше, якщо це можливо, тому що у мене є маса інших речей, які мені також доведеться перевстановити. Чи є краще рішення? І якби я встановив 64-розрядний 14.04.1, чи зможу я перекреслити компіляцію назад у 32-бітну версію, не пропускаючи заголовки в іншому напрямку?


... можливо, вам слід уникати згадки про речі, які "тут не мають значення", оскільки це не стосується.
mikew незалежно від

2
Ви встановили g++-multilibпакет?
steeldriver

@steeldriver Спасибі - це було все! Схоже, у 64-розрядної інсталяції він є за замовчуванням, але 32-розрядна установка цього не робить. Гаразд, ще щось додати до мого списку "як налаштувати Linux build VM". :) Це може здатися основним, але я не помітив це як відповідь на питання інших людей за ту ж помилку компіляції, і я насправді не експерт Linux.
Грем

Відповіді:


9

64-розрядний файл біт / с ++ config.h надається в 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.


4
sudo apt-get install g++-5-multilibотримав мені потрібну мені версію. Якщо це не працює для вас, примітка sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get updateтакож є частиною моєї конфігурації.
U007D
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.