Кажется, не удается заставить gcc или binutils создать новый компоновщик или ассемблер

Я пытаюсь создать полностью обновленную среду gcc ... в основном gcc 4.6.3 и binutils 2.22. Не довольно старый gcc 4.2.1 (llvm), который поставляется с Xcode 4.2.1. Моя проблема не в компиляции (по крайней мере, пока). Я могу скомпилировать binutils, gcc и то и другое одновременно. Однако каждый раз, когда я пытаюсь скомпилировать, я обнаруживаю, что в конце вывода configure появляется что-то вроде этого.

проверка, где найти целевой объект ar ... только что скомпилированный
проверка, где найти цель как ... инструмент хоста
проверка, где найти целевой cc ... только что скомпилированный
проверка, где чтобы найти целевой c ++ ... только что скомпилированный
проверка, где найти целевой c ++ для libstdc ++ ... только что скомпилированный
проверка, где найти целевой dlltool ... только что скомпилированный
проверка где чтобы найти целевой gcc ... только что скомпилированный
проверка, где найти целевой gcj ... только что скомпилированный
проверка, где найти целевой gfortran ... только что скомпилированный
проверка, где найти целевой инструмент gccgo ... host
проверка, где найти целевой ld ... host инструмент
проверка, где найти целевой липо ... инструмент хоста
проверка, где найти цель nm ... только что скомпилировано
проверяет, где найти целевой объект objdump ... просто скомпилировано
проверяет, где найти целевой ranlib ... только что скомпилировано
проверяет, где найти целевую полосу. .. просто скомпилировано
проверяет, где найти целевой windres ... только что скомпилировано
проверяет, где найти целевой windmc ... только что скомпилировано

Я сделал символические ссылки для ld, opcodes, bfd, gas, gprof и binutils в исходной папке gcc, чтобы получить этот вывод ... (если это поможет)

Как видите, я могу получить "только что скомпилированную" версию большинства программ, потому что я просто не могу понять, как скомпилировать as и ld. Я прочитал файл README в папке ld (которая находится в пакете binutils), и он говорит, что нужно выполнить:

сделать all-ld

Я делаю, и поскольку я уже "сделал" источник, он говорит мне, что больше нечего делать ...

Единственное, что я могу сейчас придумать, - это временно изменить свой путь, чтобы не включать ld. Это было бы довольно просто ...

иначе быстрая проверка с

где ld

в любом случае, сразу после того, как я подумал об этом, я понял, что это было бы глупо, теперь мне нечего было бы связывать с gcc (или даже с новой версией ld (если бы я вообще работал))

Итак, в заключение, я пытаюсь скомпилировать новую копию ld и as ...

Факты:

  • Я использую Mac OS X Lion.
  • Я пытаюсь скомпилировать gcc 4.6.3, используя gcc по умолчанию, который поставляется с Mac OS X Lion (gcc 4.2.1).
  • Скрипты configure, кажется, думают, что я не хочу компилировать новый компоновщик и ассемблер.
  • Я успешно построил работающие gcc и binutils, но без нового компоновщика и ассемблера.
  • Я пытался скомпилировать binutils и gcc с опциями --with-ld = yes и --with-gold = no, похоже, они ничего не сделали.
  • Я построил gmp v5.0.4, mpfr v3.1.0 и mpc v0.9, используя gcc v4.2.1, установив их с тем же префиксом, который используется в конфигурации gcc и binutils.
  • Для каждой конфигурации я явно указываю расположение gmp, mpfr и mpc.
  • Я построил gmp, mpfr и mpc отдельно от gcc (это привело к некоторым ошибкам сборки).
  • gcc, binutils, gmp, mpfr и mpc создаются в отдельном каталоге, который не является подкаталогом исходного каталога (как рекомендовано инструкциями по установке gcc).
  • Я компилирую gcc со следующими параметрами:
    ../gcc-4.6.3/configure --prefix = $ PREFIX --with-gmp = $ PREFIX --with-mpfr = $ PREFIX --with-mpc = $ PREFIX --enable-testing = release --program-suffix = -4.6.3 --enable-ld = yes --enable-gold = no
  • В основном я следил за это руководство.
  • Поскольку на моем компьютере нет другого компилятора, я вынужден использовать компилятор llvm по умолчанию для mac os x (который я описал ранее как gcc 4.2.1), который я прочитал здесь не работает, однако на моем компьютере нет gcc-4.2.
  • Компиляция gcc-4.7.0 (самый последний снимок) с использованием только что скомпилированной новой версии gcc (gcc-4.6.3) приводит к ошибкам компилятора (я установил переменные среды CC и CXX).
  • Я пробовал сначала скомпилировать gcc, чем binutils, и наоборот, в конце концов я решил, что сборка gcc с binutils - лучший вариант. Результат выше был с обоими скомпилированными одновременно
  • Я прочитал этот небольшой пост о золоте и попытался добавить --enable- золото и --enable-ld. Они ничего не изменили
  • The order in which I did things:
    1. Compile gmp.
    2. Установите его.
    3. Скомпилируйте mpfr.
    4. Установите его.
    5. Скомпилируйте mpc.
    6. Установите его.
    7. Сделайте символические ссылки на основной каталог gcc src для ld, gas, binutils, opcodes, gprof, bfd.
    8. Настроить gcc.
    9. Найдите этот «отчет о состоянии».
    10. Подумайте о другом способе построения ld и as.
    11. В этом нет ничего плохого.
    12. Перейти к переполнению стека.

как сказал "fazo", я никому особо не рассказываю о том, как я компилировал binutils ... так что вот оно ...

Я попробовал сначала скомпилировать gcc, а затем собрать binutils с помощью gcc, который компилировался нормально, но без ld, as или даже gold. Затем я попытался использовать компилятор llvm для сборки binutils, а затем gcc. Тоже нормально работало, но все равно ни ld, as, ни gold. Наконец, я прочитал здесь, что могу создавать символические ссылки на некоторые элементы в binutils, а gcc обнаружит и построил их ... Я сделал. и gcc нашел большинство из них (как уже говорилось ранее, я поместил символические ссылки в каталог gcc для ld, opcodes, bfd, gas, gprof и binutils). Моя настоящая проблема здесь заключается в том, что скрипт configure скомпилирует новый ассемблер и компоновщик. Кроме того, что меня сбивает с толку, так это то, что в папке README binutils говорится, что простой ./configure make make install соберет и установит все инструменты, я пытаюсь понять, почему это не так.

Последняя команда выглядит так: ../binutils-2.22/configure --prefix = $ PREFIX --with-gmp = $ PREFIX --with-mpfr = $ PREFIX --with-mpc = $ PREFIX --program- суффикс = -4.6.3 --enable-ld --with-gnu-as --with-gnu-ld

но я все еще не получаю ни лд, ни газа.

Любая помощь приветствуется! (также, если вам нужна информация, которую я не предоставил, просто спросите)

Благодарность... :)


person Community    schedule 05.03.2012    source источник
comment
когда вы компилировали binutils, были ли у вас скомпилированы AS и LD? после компиляции binutils вы его установили? вы скомпилировали gcc после компиляции и установки binutils?   -  person fazo    schedule 06.03.2012
comment
Я только что обновил вопрос, он должен сказать вам, что вам нужно   -  person    schedule 06.03.2012
comment
у вас есть проблема с компиляцией as и ld, но вы в основном описываете, как вы компилируете gcc. отредактируйте его и опишите только то, что вы делаете и как компилируете binutils.   -  person fazo    schedule 06.03.2012
comment
Кстати. включены ли --with-gnu-as и --with-gnu-ld при сборке binutils?   -  person fazo    schedule 06.03.2012
comment
Я только что добавил это, а также --enable-ld и все еще без изменений ... все еще нет газа или ld   -  person    schedule 06.03.2012
comment
кстати, просто добавил новую информацию ... не хотел ее переписывать, просто потому что я думал, что чем больше информации, тем лучше, но я добавил раздел, который подробно описывает то, что я сделал   -  person    schedule 06.03.2012
comment
Я симпатизирую; Сегодня утром я попытался получить 4.6.3 для сборки на Mac OS X 10.7.3, используя GCC 4.6.1, который мне удалось скомпилировать некоторое время назад, и большую часть времени он работает нормально, но при запуске для сборки GCC он может Непонятно как определить размер long long. В моем случае я думаю, что проблема связана с тем, что каталог gcc создается, а затем execlp() пытается запустить каталог, или, возможно, cc1 в этом каталоге вместо его настроенного местоположения; что-то странное. Удачи ... здесь нет никакой полезной информации, кроме как заверить вас, что вы не одиноки.   -  person Jonathan Leffler    schedule 06.03.2012
comment
о боже, у меня была такая же проблема, точно, я компилирую gcc 4.6.3 хорошо, но при использовании его для компиляции недавнего снимка (4.7.0) он говорит, что не может определить размер long long ... вау . приятно знать, что это не только я .... спасибо :)!   -  person    schedule 06.03.2012
comment
GNU gold - это компоновщик ELF. OS X использует Mach-O, поэтому вам следует отключить золото в сборке. В любом случае его не следует собирать по умолчанию в OS X.   -  person Brett Hale    schedule 06.03.2012
comment
о, хорошо, поскольку Mac является производным от Unix, я предположил, что он использовал elf   -  person    schedule 07.03.2012


Ответы (3)


Afaik со стандартными сборками (configure; make) результаты называются по-другому. газ новый и старый или около того.

Обратите внимание, что OS X обычно не использует binutils, а использует собственный компоновщик Apple Mach-O (cctools). Даже если вам это удастся, это может не привести к работоспособному решению.

person Marco van de Voort    schedule 06.03.2012

Я понял, что это в основном проблема Mac. После установки и получения Ubuntu компоновщик и ассемблер собраны отлично ... все еще возникают проблемы с компиляцией gcc, но это из-за поддержки новой многоархитектурной архитектуры Debian ... но это другая проблема ... Спасибо за вашу помощь Марко ван де Вурт

person Community    schedule 19.03.2012

Binutils не поддерживает ассемблер или компоновщик в OS X, см. Сценарий binutils configure:

case "${target}" in
  *-*-chorusos)
    ;;
  aarch64-*-darwin*)
    noconfigdirs="$noconfigdirs ld gas gdb gprof"
    noconfigdirs="$noconfigdirs sim target-rda"
    ;;
  arm-*-darwin*)
    noconfigdirs="$noconfigdirs ld gas gdb gprof"
    noconfigdirs="$noconfigdirs sim target-rda"
    ;;
  powerpc-*-darwin*)
    noconfigdirs="$noconfigdirs ld gas gdb gprof"
    noconfigdirs="$noconfigdirs sim target-rda"
    ;;
  i[3456789]86-*-darwin*)
    noconfigdirs="$noconfigdirs ld gprof"
    noconfigdirs="$noconfigdirs sim target-rda"
    ;;
  x86_64-*-darwin[912]*)
    noconfigdirs="$noconfigdirs ld gas gprof"
    noconfigdirs="$noconfigdirs sim target-rda"
    ;;
  *-*-darwin*)
    noconfigdirs="$noconfigdirs ld gas gdb gprof"
    noconfigdirs="$noconfigdirs sim target-rda"
    ;;

Для любой цели darwin (например, OS X) это добавляет ld и gas в список noconfigdirs. Это означает, что эти каталоги будут пропущены во время сборки.

Чтобы собрать GCC на OS X, вам необходимо использовать собственный ассемблер и компоновщик OS X (которые являются частью пакета «Инструменты командной строки Xcode» из App Store).

person Jonathan Wakely    schedule 29.08.2018