Translated gcc, gdbm, gettext

This commit is contained in:
Poltern 2023-07-08 23:55:58 +05:00
parent 3d13065e9a
commit 481074bd20
3 changed files with 55 additions and 33 deletions

View File

@ -73,12 +73,14 @@ cd build</userinput></screen>
<screen><userinput remap="configure">../configure --prefix=/usr \
LD=ld \
--enable-languages=c,c++ \
--enable-default-pie \
--enable-default-ssp \
--disable-multilib \
--disable-bootstrap \
--with-system-zlib</userinput></screen>
<para>Обратите внимание, что для поддержки других языков программирования существуют
дополнительные условия, которые пока недоступны. См. страницу
<para>GCC поддерживает семь различных языков программирования, но предварительные условия
для большинства из них еще не выполнены. См. страницу
<ulink url="&blfs-book;general/gcc.html">BLFS Book GCC</ulink> для получения инструкций
о том, как собрать все языки, поддерживаемые GCC</para>
@ -89,7 +91,7 @@ cd build</userinput></screen>
<term><parameter>LD=ld</parameter></term>
<listitem>
<para>Этот параметр указывает скрипту configure использовать ld, установленный
программой binutils, собранной ранее в этой главе, а не кросс версию, которая
программой Binutils, собранной ранее в этой главе, а не кросс версию, которая
использовалась бы в противном случае.</para>
</listitem>
</varlistentry>
@ -98,11 +100,29 @@ cd build</userinput></screen>
<term><parameter>--with-system-zlib</parameter></term>
<listitem>
<para>Этот параметр указывает GCC ссылаться на установленную в системе копию
библиотеки zlib, а не на собственную внутреннюю копию.</para>
библиотеки Zlib, а не на собственную внутреннюю копию.</para>
</listitem>
</varlistentry>
</variablelist>
<note>
<anchor id="pie-ssp-info" xreflabel="примечание о PIE и SSP"/>
<para>
PIE (позиционно-независимые исполняемые файлы) — это двоичные программы, которые
можно загружать в любое место памяти. Без PIE функция безопасности под названием
ASLR (рандомизация размещения адресного пространства) может применяться к общим
библиотекам, но не к самим исполняемым файлам. Включение PIE позволяет использовать
ASLR для исполняемых файлов в дополнение к общим библиотекам и смягчает некоторые
атаки, основанные на фиксированных адресах конфиденциального кода или данных в
исполняемых файлах.
</para>
<para>
SSP (Stack Smashing Protection - защита от разрушения стека) — это метод, гарантирующий,
что стек параметров не будет поврежден. Повреждение стека может, например, изменить адрес
возврата подпрограммы, тем самым передав управление какому-то опасному коду (существующему
в программе или общих библиотеках или каким-то образом внедренному злоумышленником).
</para>
</note>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">make</userinput></screen>
@ -110,11 +130,11 @@ cd build</userinput></screen>
<important>
<para>В этом разделе набор тестов для GCC считается важным, но занимает много времени.
Начинающим сборщикам не рекомендуется пропускать его. Время выполнения тестов можно
значительно сократить, добавив -jx в приведенную ниже команду make, где x - количество
ядер в вашей системе.</para>
значительно сократить, добавив -jx в приведенную ниже команду <command>make -k check</command>,
где x - количество ядер в вашей системе.</para>
</important>
<para>Известно, что один набор тестов GCC исчерпывает стек по умолчанию, поэтому увеличьте
<para>Известно, что один набор тестов GCC переполняет стек по умолчанию, поэтому увеличьте
размер стека перед запуском тестов:</para>
<screen><userinput remap="test">ulimit -s 32768</userinput></screen>
@ -129,15 +149,19 @@ su tester -c "PATH=$PATH make -k check"</userinput></screen>
<screen><userinput remap="test">../contrib/test_summary</userinput></screen>
<para>Чтобы получить только итоговую сводку, передайте выходные данные grep
<para>Чтобы отфильтровать только итоговую сводку, передайте вывод через pipe
<userinput>grep -A7 Summ</userinput>.</para>
<para>Результаты можно сравнить с результатами, размещенными на <ulink
url="&test-results;"/> и
<ulink url="https://gcc.gnu.org/ml/gcc-testresults/"/>.</para>
<para>Известно, что в g++ четыре теста, относящиеся к PR100400, сообщают как XPASS,
так и FAIL. Это потому, что тестовый файл написан не очень хорошо.</para>
<para>Известно, что одиннадцать тестов в наборе тестов i386 для компилятора gcc завершаются
неудачно. Это связано с тем, что в тестовых файлах не учитывается параметр
<parameter>--enable-default-pie</parameter>.</para>
<para>Четыре теста, относящиеся к PR100400, сообщают как XPASS, так и FAIL при проверке
компилятора g++. Это происходит потому что тестовый файл написан не очень хорошо.</para>
<para>Не всегда удается избежать неожиданных сбоев. Разработчики GCC обычно знают
об этих проблемах, но еще не решили их. Если результаты теста не сильно отличаются
@ -157,9 +181,9 @@ su tester -c "PATH=$PATH make -k check"</userinput></screen>
<screen><userinput remap="install">make install</userinput></screen>
<para>Каталог сборки GCC теперь принадлежит пользователю <systemitem class="username">
tester</systemitem>, и владелец на
каталог (и его содержимое) указан неверно. Измените владельца
на пользователя и группу <systemitem class="username">root</systemitem>:</para>
tester</systemitem>, и владелец каталога заголовочных файлов (и его содержимого) указан
неверно. Измените владельца на пользователя и группу
<systemitem class="username">root</systemitem>:</para>
<screen><userinput remap="install">chown -v -R root:root \
/usr/lib/gcc/$(gcc -dumpmachine)/&gcc-version;/include{,-fixed}</userinput></screen>
@ -196,11 +220,11 @@ readelf -l a.out | grep ': /lib'</userinput></screen>
<para>Теперь убедитесь, что мы настроили использование правильных стартовых файлов:</para>
<screen><userinput>grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log</userinput></screen>
<screen><userinput>grep -E -o '/usr/lib.*/S?crt[1in].*succeeded' dummy.log</userinput></screen>
<para>Вывод последней команды должен быть:</para>
<screen><computeroutput>/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crt1.o succeeded
<screen><computeroutput>/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/Scrt1.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crti.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crtn.o succeeded</computeroutput></screen>
@ -241,7 +265,7 @@ SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");</computeroutput></screen>
<para>32-разрядная система может видеть несколько разных каталогов. Например, вот
<para>32-разрядная система может использовать несколько других каталогов. Например, вот
вывод с компьютера i686:</para>
<screen><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32")
@ -302,10 +326,10 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
libgcc_s.so, libgcov.a, libgomp.{a,so}, libitm.{a,so},
liblsan.{a,so}, liblto_plugin.so,
libquadmath.{a,so}, libssp.{a,so}, libssp_nonshared.a,
libstdc++.{a,so}, libstdc++fs.a, libsupc++.a, libtsan.{a,so},
libstdc++.{a,so}, libstdc++fs.a, libsupc++.a, libtsan.{a,so}
и libubsan.{a,so}</seg>
<seg>/usr/include/c++, /usr/lib/gcc, /usr/libexec/gcc, и
<seg>/usr/include/c++, /usr/lib/gcc, /usr/libexec/gcc и
/usr/share/gcc-&gcc-version;</seg>
</seglistitem>
</segmentedlist>
@ -339,7 +363,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
<term><command>cpp</command></term>
<listitem>
<para>Препроцессор C; он используется компилятором для расширения инструкций
#include, #define и аналогичных инструкций в исходных файлах</para>
#include, #define и подобные директивы в исходных файлах</para>
<indexterm zone="ch-system-gcc cpp">
<primary sortas="b-cpp">cpp</primary>
</indexterm>
@ -486,8 +510,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
<varlistentry id="libgcov">
<term><filename class="libraryfile">libgcov</filename></term>
<listitem>
<para>Эта библиотека компонуется с программой, когда для GCC указано
использовать профилирование</para>
<para>Эта библиотека компонуется с программой, когда в GCC включено профилирование</para>
<indexterm zone="ch-system-gcc libgcov">
<primary sortas="c-libgcov">libgcov</primary>
</indexterm>
@ -528,7 +551,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
<varlistentry id="liblto_plugin">
<term><filename class="libraryfile">liblto_plugin</filename></term>
<listitem>
<para>Плагин GCC LTO позволяет binutils обрабатывать объектные файлы,
<para>Плагин GCC LTO позволяет Binutils обрабатывать объектные файлы,
созданные GCC с включенным LTO.</para>
<indexterm zone="ch-system-gcc liblto_plugin">
<primary sortas="c-liblto_plugin">liblto_plugin</primary>
@ -549,7 +572,8 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
<varlistentry id="libssp">
<term><filename class="libraryfile">libssp</filename></term>
<listitem>
<para>Содержит подпрограммы, поддерживающие функциональность защиты стека GCC.</para>
<para>Содержит подпрограммы, поддерживающие функциональность защиты стека GCC.
Обычно они не используются, потому что Glibc также предоставляет эти подпрограммы.</para>
<indexterm zone="ch-system-gcc libssp">
<primary sortas="c-libssp">libssp</primary>
</indexterm>

View File

@ -25,7 +25,7 @@
<para>Пакет GDBM содержит менеджер баз данных GNU. Это библиотека функций
базы данных, использующая расширяемое хеширование и работающая аналогично
стандартной UNIX dbm. Библиотека предоставляет примитивы для хранения пар
стандартной СУБД UNIX. Библиотека предоставляет примитивы для хранения пар
ключ/значение, поиска и извлечения данных по его ключу и удаления ключа
вместе с его данными.</para>

View File

@ -60,8 +60,8 @@
<term><parameter>BISON_LOCALEDIR=/usr/share/locale</parameter></term>
<listitem>
<para>Since bison is not yet installed in /usr, configure hardcodes
the directory containing translations for the bison program (the
"locale" directory) as /tools/share/locale. Passing this variable
the directory containing translations for the bison program (the
"locale" directory) as /tools/share/locale. Passing this variable
to make allows overriding the choice made by configure.</para>
</listitem>
</varlistentry>
@ -337,7 +337,7 @@ chmod -v 0755 /usr/lib/preloadable_libintl.so</userinput></screen>
<varlistentry id="libasprintf">
<term><filename class="libraryfile">libasprintf</filename></term>
<listitem>
<para>определяет класс <emphasis>autosprintf</emphasis>, который делает
<para>Определяет класс <emphasis>autosprintf</emphasis>, который делает
подпрограммы вывода в формате C пригодными для использования в программах
на C++ для использования со строками <emphasis>&lt;string&gt;</emphasis> и
потоками <emphasis>&lt;iostream&gt;</emphasis></para>
@ -350,9 +350,8 @@ chmod -v 0755 /usr/lib/preloadable_libintl.so</userinput></screen>
<varlistentry id="libgettextlib">
<term><filename class="libraryfile">libgettextlib</filename></term>
<listitem>
<para>Приватная библиотека, в которой находятся общие подпрограммы,
используемые в различных программах Gettext; они не предназначены
для общего использования</para>
<para>Содержит общие подпрограммы, используемые различными программами
Gettext; они не предназначены для общего использования</para>
<indexterm zone="ch-system-gettext libgettextlib">
<primary sortas="c-libgettextlib">libgettextlib</primary>
</indexterm>
@ -376,9 +375,8 @@ chmod -v 0755 /usr/lib/preloadable_libintl.so</userinput></screen>
<varlistentry id="libgettextsrc">
<term><filename class="libraryfile">libgettextsrc</filename></term>
<listitem>
<para>Приватная библиотека, в которой находятся общие подпрограммы,
используемые в различных программах Gettext; они не предназначены
для общего использования</para>
<para>Предоставляет общие подпрограммы, используемые различными программами
Gettext; они не предназначены для общего использования</para>
<indexterm zone="ch-system-gettext libgettextsrc">
<primary sortas="c-libgettextsrc">libgettextsrc</primary>
</indexterm>