Проблема при сборке gcc на Mac - не удается найти системные заголовки - PullRequest
0 голосов
/ 06 сентября 2018

Я на Mac под управлением OS-X High Sierra и хотел создать отдельную сборку gcc. Позвольте мне немного рассказать о процессе, который у меня занял неделю, чтобы помочь другим:

Я создал безопасный каталог "gcc" и использовал svn, чтобы получить последний исходный код от gcc, который он создал в подкаталоге "trunk". Сначала я создал каталог с именем "build" на верхнем уровне транка.

Он не скомпилировался бы без 4-х зависимостей, поэтому я запустил предварительные условия ./contrib/download, чтобы получить их, но все равно не скомпилировал, поэтому я вошел в каждый из этих 4-х каталогов по отдельности и сделал ./configure, ./make, ./make install и ./make check. Я выполнил установку, потому что даже эти зависимости зависели друг от друга, поэтому установка казалась безопасным способом убедиться, что их можно найти. Позже я узнал, что нет другого пути, несмотря на инструкции об обратном ...

Мне удалось построить зависимости GMP, MPFR, ISL и MPC. Затем я вернулся к ./build и ../configure преуспел, но сборка (make) быстро потерпела неудачу, говоря: «Исходный каталог уже настроен; сначала запустите« make distclean там ». Поиск в Google показал, что это было при настройке в исходном каталоге Я подумал, что, возможно, мой каталог trunk / build считается «в исходном каталоге», поэтому я переместил его и повторил попытку, и произошло то же самое. Когда я попытался перейти в транк и ввести «make distclean», мне просто сказали, что нет правила для сделать цель нечистой.

Так что я подумал, может быть, это 4 каталога зависимостей? Может быть, теперь, когда они установлены, их всех можно безопасно очистить? Там, сделай, чтобы distclean работал и вынул все - даже тесты, которые я провел. Кажется расточительным и требует предварительной установки, но это сработало.

Вернувшись в сборку, make затем запустил некоторую серьезную работу по компиляции во время make, но вылетел, сказав, что «каталог, который должен содержать системные заголовки, не существует: /usr/include".

Как мне это загрузить? Где я могу найти системные заголовки для копирования в / usr / include? И будет ли у меня такая же проблема с отсутствующими libc и библиотеками позже? Кроме того, если я хочу перенести это на новый компьютер без перекомпоновки, что мне нужно копировать, кроме исполняемых файлов и заголовков? И куда бы я их положил?

Спасибо за любой совет ... - Джефф

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

В блоге Пола Силистеану есть отличное сообщение, в котором подробно описывается этот процесс: Компиляция GCC 9 в macOS Mojave .

Короткая версия:

1) macOS 10.14 Mojave переместил системные заголовки, что является одной из причин, почему сборка GCC из исходного кода является сложной задачей. Однако Apple предоставляет установщик для их замены.

cd /Library/Developer/CommandLineTools/Packages/
open .

Откроется окно в Finder, установите пакет. Обратите внимание, что это не гарантируется в будущих обновлениях ОС.

2) Построить зависимости:

Каждый из них прост и не требует ничего особенного (но устанавливается в этом порядке).

3) В блоге рекомендуется эта конфигурация (предполагается, что версия 9.1). Вы можете разместить зависимости в других местах, просто укажите где.

mkdir build && cd build
../configure --prefix=/usr/local/gcc-9.1 \
             --enable-checking=release \
             --with-gmp=/usr/local/gcc-9.1 \
             --with-mpfr=/usr/local/gcc-9.1 \
             --with-mpc=/usr/local/gcc-9.1 \
             --enable-languages=c,c++,fortran \
             --with-isl=/usr/local/gcc-9.1 \
             --program-suffix=-9.1

Суффикс программы является необязательным, но он подходит для "особого случая" этого компилятора, чтобы не перепутать его с clang.

Это сжатые инструкции для опытного пользователя; см. сообщение в блоге для более подробной и организованной экскурсии.

0 голосов
/ 25 октября 2018

ОК, ничего из упомянутого выше не сработало вообще - ни один из флагов сборки gcc не сработал Но я наконец-то исправил мою систему простым способом: проблема в том, что вам нужен gcc для создания gcc, а я даже не мог выполнить brew install gcc - это могло привести к сбою с испорченной библиотекой C ++.

Но затем я понял, что XCode поставляется с безопасным, полностью автономным (если не устарелым) набором инструментов clang / llvm - это практически похоже на докер. Чтобы найти, куда именно все это положить, я использовал команду xcodebuild -find x (заменив "x" на make, gcc, clang и т. Д.). Я обнаружил, что все, что нужно gcc для сборки, было здесь:

export PATH=/Applications/Xcode.app/Contents/Developer/usr/bin:$PATH

Как только это встало у меня на пути, make пошел туда и использовал gcc XCode, который был достаточно новым для сборки или установки современного gcc, поэтому ТО я мог сделать:

brew reinstall gcc

И, черт возьми, я наконец-то получил полнофункциональный набор инструментов gcc. Заварить положить его в /usr/local/bin и т. Д.

Это было сложнее, чем я когда-либо думал. Поскольку вам нужен gcc для создания gcc, как он вообще появился? ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...