передать stdout fd для системного вызова «чтение», но он все еще работает нормально

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 может быть скомпилирован для ряда целевых платформ. Здесь вы видите исходный код, не зависящий от платформы -, один исходный код подходит всем.

0
20.12.2018, 01:55
2 ответа

Единственным соглашением является использование fd 0/1/2 для ввода/вывода/ошибки. Если вы вызываете программу без перенаправления, все три относятся к вашему tty, и ваш tty открыт с доступом для чтения и записи. Это означает, что вы можете читать или писать в них, как хотите. Вы можете назвать их одним и тем же потоком, хотя поток выражений часто используется для ввода-вывода более высокого уровня, например FILEв C или streamв C++.

Это причина того, что как перенаправленные, так и не перенаправленные примеры просто повторяют введенный вами текст.

С другой стороны, если вы выполняете перенаправление, оболочка будет открывать файлы с доступом только для чтения или только для записи. В вашем примере ./a.out 2>/dev/nullзапись в 0по-прежнему связана с терминалом, поскольку она не перенаправляется и поэтому отображается на экране. Чтение из 2связано с записью только /dev/nullи поэтому должно завершиться ошибкой, но вы не заметите разницы с вашей программой. Запись в 2выполнена успешно, но записывается в /dev/null. Недопустимое чтение и действительная запись в /dev/nullне видны на вашем терминале.

1
28.04.2021, 23:43

Пока вы не перенаправили stdin/stdout/stderr, эти файловые дескрипторы были открыты процедурой входа в систему, и это открывает соответствующий ttyдля чтения и записи в качестве первого файла (, что приводит к файловому дескриптору #0 )и более поздние вызовы dup()2 раза, чтобы получить файловые дескрипторы для stdout и stderr.

Как упоминалось в , как `less `берет данные со стандартного ввода, но при этом может читать команды от пользователя? в прежние времена (до того, как /dev/ttyбыл введен вUNIX)программы, подобные more, читали из stderrпри запросе подтверждения.

-1
28.04.2021, 23:43

Теги

Похожие вопросы