I have a very shaky understanding of the "download source code, then build it yourself" paradigm that's common in Linux-land. Can someone please describe how I can do this specific to the noted toolchain in the error?
В общем, прочитайте разделы быстрого запуска и устранения неполадок http://www.kegel.com/crosstool/current/doc/crosstool-howto.html
.
В более общем плане см. Как компилировать и устанавливать программы из исходного кода для компиляции из исходного кода.
Это должно ответить на некоторые ваши вопросы.
What should I download from here? I assume I can safely ignore things like fortran, and java. But from among { gcc-4.2.4, gcc-core-4.2.4, gcc-g++-4.2.4, gcc-testsuite-4.2.4 }, which should I download? All?
Обратите внимание, что crosstool загружает их за вас!
After downloading+extracting the correct set of tarballs, what exactly is next? I have a tentative understanding that eventually I will be doing the configure; make; make install incantation, but I'm unclear what I need to do before and after.
crosstool компилирует их для вас.
В более общем плане :Вы сначала прочитаете инструкции по сборке на веб-сайте, ДО ТОГО, как загрузите исходный код того, что хотите.
Обычно
./configure && make && sudo make install
выглядит так:Исходный код, который вы извлекаете во временный каталог, переходите в этот каталог и запускаете
./configure
Это проверит, что все предварительные условия выполнены. В нем будут упомянуты все недостающие библиотеки, они находятся в пакетах dev (debian )/devel (redhat/suse ), которые вам понадобятся. Найдите их, установите и повторите попытку./configure
.Как только он завершится без ошибок, вы выдаете
make
.Надеемся, что он завершится без ошибок, вы выдаете
sudo make install
.Иногда вы получаете autogen.sh вместо configure... читайте инструкции на сайте.
You'll note the error mentions glibc-2.3.6. Where does this fit into the picture? As noted above, the ftp site I'm at only mentions gcc-4.2.4. I'm unclear what "melds" gcc-4.2.4 and glibc-2.3.6 for purposes of resolving the build error.
glibc — используемая библиотека c. Библиотека c на целевой платформе должна быть совместимой версией, иначе у вас возникнут проблемы. Опять же, crosstool справится с этим за вас.
Таким образом, glibc — это библиотека c, похожая на DLL, которую используют все программы, скомпилированные с помощью gcc (компилятора C ). gcc компилирует исходный код (текстовые файлы )для данной комбинации платформы/версии glibc в двоичные файлы, исполняемые файлы и библиотеки.
Вы можете увидеть зависимости данной программы, используя ldd, например
ldd /usr/bin/gawk
.The noted ftp site looks like a "generic" gcc. I.e. from the filenames, I don't perceive any relation to powerpc-405. Am I on the right track, or should I be looking elsewhere? I did google for various combinations of "powerpc" and "gcc" and did not find anything that looked like it led to a powerpc-405-specific gcc.
Исходный код gcc может быть скомпилирован для ряда целевых платформ. Здесь вы видите исходный код, не зависящий от платформы -, один исходный код подходит всем.
Единственным соглашением является использование fd 0/1/2 для ввода/вывода/ошибки. Если вы вызываете программу без перенаправления, все три относятся к вашему tty, и ваш tty открыт с доступом для чтения и записи. Это означает, что вы можете читать или писать в них, как хотите. Вы можете назвать их одним и тем же потоком, хотя поток выражений часто используется для ввода-вывода более высокого уровня, например FILE
в C или stream
в C++.
Это причина того, что как перенаправленные, так и не перенаправленные примеры просто повторяют введенный вами текст.
С другой стороны, если вы выполняете перенаправление, оболочка будет открывать файлы с доступом только для чтения или только для записи. В вашем примере ./a.out 2>/dev/null
запись в 0
по-прежнему связана с терминалом, поскольку она не перенаправляется и поэтому отображается на экране. Чтение из 2
связано с записью только /dev/null
и поэтому должно завершиться ошибкой, но вы не заметите разницы с вашей программой. Запись в 2
выполнена успешно, но записывается в /dev/null
. Недопустимое чтение и действительная запись в /dev/null
не видны на вашем терминале.
Пока вы не перенаправили stdin/stdout/stderr, эти файловые дескрипторы были открыты процедурой входа в систему, и это открывает соответствующий tty
для чтения и записи в качестве первого файла (, что приводит к файловому дескриптору #0 )и более поздние вызовы dup()
2 раза, чтобы получить файловые дескрипторы для stdout и stderr.
Как упоминалось в , как `less `берет данные со стандартного ввода, но при этом может читать команды от пользователя? в прежние времена (до того, как /dev/tty
был введен вUNIX
)программы, подобные more
, читали из stderr
при запросе подтверждения.