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 \ <screen><userinput remap="configure">../configure --prefix=/usr \
LD=ld \ LD=ld \
--enable-languages=c,c++ \ --enable-languages=c,c++ \
--enable-default-pie \
--enable-default-ssp \
--disable-multilib \ --disable-multilib \
--disable-bootstrap \ --disable-bootstrap \
--with-system-zlib</userinput></screen> --with-system-zlib</userinput></screen>
<para>Обратите внимание, что для поддержки других языков программирования существуют <para>GCC поддерживает семь различных языков программирования, но предварительные условия
дополнительные условия, которые пока недоступны. См. страницу для большинства из них еще не выполнены. См. страницу
<ulink url="&blfs-book;general/gcc.html">BLFS Book GCC</ulink> для получения инструкций <ulink url="&blfs-book;general/gcc.html">BLFS Book GCC</ulink> для получения инструкций
о том, как собрать все языки, поддерживаемые GCC</para> о том, как собрать все языки, поддерживаемые GCC</para>
@ -89,7 +91,7 @@ cd build</userinput></screen>
<term><parameter>LD=ld</parameter></term> <term><parameter>LD=ld</parameter></term>
<listitem> <listitem>
<para>Этот параметр указывает скрипту configure использовать ld, установленный <para>Этот параметр указывает скрипту configure использовать ld, установленный
программой binutils, собранной ранее в этой главе, а не кросс версию, которая программой Binutils, собранной ранее в этой главе, а не кросс версию, которая
использовалась бы в противном случае.</para> использовалась бы в противном случае.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -98,11 +100,29 @@ cd build</userinput></screen>
<term><parameter>--with-system-zlib</parameter></term> <term><parameter>--with-system-zlib</parameter></term>
<listitem> <listitem>
<para>Этот параметр указывает GCC ссылаться на установленную в системе копию <para>Этот параметр указывает GCC ссылаться на установленную в системе копию
библиотеки zlib, а не на собственную внутреннюю копию.</para> библиотеки Zlib, а не на собственную внутреннюю копию.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </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> <para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">make</userinput></screen> <screen><userinput remap="make">make</userinput></screen>
@ -110,11 +130,11 @@ cd build</userinput></screen>
<important> <important>
<para>В этом разделе набор тестов для GCC считается важным, но занимает много времени. <para>В этом разделе набор тестов для GCC считается важным, но занимает много времени.
Начинающим сборщикам не рекомендуется пропускать его. Время выполнения тестов можно Начинающим сборщикам не рекомендуется пропускать его. Время выполнения тестов можно
значительно сократить, добавив -jx в приведенную ниже команду make, где x - количество значительно сократить, добавив -jx в приведенную ниже команду <command>make -k check</command>,
ядер в вашей системе.</para> где x - количество ядер в вашей системе.</para>
</important> </important>
<para>Известно, что один набор тестов GCC исчерпывает стек по умолчанию, поэтому увеличьте <para>Известно, что один набор тестов GCC переполняет стек по умолчанию, поэтому увеличьте
размер стека перед запуском тестов:</para> размер стека перед запуском тестов:</para>
<screen><userinput remap="test">ulimit -s 32768</userinput></screen> <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> <screen><userinput remap="test">../contrib/test_summary</userinput></screen>
<para>Чтобы получить только итоговую сводку, передайте выходные данные grep <para>Чтобы отфильтровать только итоговую сводку, передайте вывод через pipe
<userinput>grep -A7 Summ</userinput>.</para> <userinput>grep -A7 Summ</userinput>.</para>
<para>Результаты можно сравнить с результатами, размещенными на <ulink <para>Результаты можно сравнить с результатами, размещенными на <ulink
url="&test-results;"/> и url="&test-results;"/> и
<ulink url="https://gcc.gnu.org/ml/gcc-testresults/"/>.</para> <ulink url="https://gcc.gnu.org/ml/gcc-testresults/"/>.</para>
<para>Известно, что в g++ четыре теста, относящиеся к PR100400, сообщают как XPASS, <para>Известно, что одиннадцать тестов в наборе тестов i386 для компилятора gcc завершаются
так и FAIL. Это потому, что тестовый файл написан не очень хорошо.</para> неудачно. Это связано с тем, что в тестовых файлах не учитывается параметр
<parameter>--enable-default-pie</parameter>.</para>
<para>Четыре теста, относящиеся к PR100400, сообщают как XPASS, так и FAIL при проверке
компилятора g++. Это происходит потому что тестовый файл написан не очень хорошо.</para>
<para>Не всегда удается избежать неожиданных сбоев. Разработчики GCC обычно знают <para>Не всегда удается избежать неожиданных сбоев. Разработчики GCC обычно знают
об этих проблемах, но еще не решили их. Если результаты теста не сильно отличаются об этих проблемах, но еще не решили их. Если результаты теста не сильно отличаются
@ -157,9 +181,9 @@ su tester -c "PATH=$PATH make -k check"</userinput></screen>
<screen><userinput remap="install">make install</userinput></screen> <screen><userinput remap="install">make install</userinput></screen>
<para>Каталог сборки GCC теперь принадлежит пользователю <systemitem class="username"> <para>Каталог сборки GCC теперь принадлежит пользователю <systemitem class="username">
tester</systemitem>, и владелец на tester</systemitem>, и владелец каталога заголовочных файлов (и его содержимого) указан
каталог (и его содержимое) указан неверно. Измените владельца неверно. Измените владельца на пользователя и группу
на пользователя и группу <systemitem class="username">root</systemitem>:</para> <systemitem class="username">root</systemitem>:</para>
<screen><userinput remap="install">chown -v -R root:root \ <screen><userinput remap="install">chown -v -R root:root \
/usr/lib/gcc/$(gcc -dumpmachine)/&gcc-version;/include{,-fixed}</userinput></screen> /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> <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> <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/crti.o succeeded
/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crtn.o succeeded</computeroutput></screen> /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("/lib")
SEARCH_DIR("/usr/lib");</computeroutput></screen> SEARCH_DIR("/usr/lib");</computeroutput></screen>
<para>32-разрядная система может видеть несколько разных каталогов. Например, вот <para>32-разрядная система может использовать несколько других каталогов. Например, вот
вывод с компьютера i686:</para> вывод с компьютера i686:</para>
<screen><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32") <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}, libgcc_s.so, libgcov.a, libgomp.{a,so}, libitm.{a,so},
liblsan.{a,so}, liblto_plugin.so, liblsan.{a,so}, liblto_plugin.so,
libquadmath.{a,so}, libssp.{a,so}, libssp_nonshared.a, 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> и 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> /usr/share/gcc-&gcc-version;</seg>
</seglistitem> </seglistitem>
</segmentedlist> </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> <term><command>cpp</command></term>
<listitem> <listitem>
<para>Препроцессор C; он используется компилятором для расширения инструкций <para>Препроцессор C; он используется компилятором для расширения инструкций
#include, #define и аналогичных инструкций в исходных файлах</para> #include, #define и подобные директивы в исходных файлах</para>
<indexterm zone="ch-system-gcc cpp"> <indexterm zone="ch-system-gcc cpp">
<primary sortas="b-cpp">cpp</primary> <primary sortas="b-cpp">cpp</primary>
</indexterm> </indexterm>
@ -486,8 +510,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
<varlistentry id="libgcov"> <varlistentry id="libgcov">
<term><filename class="libraryfile">libgcov</filename></term> <term><filename class="libraryfile">libgcov</filename></term>
<listitem> <listitem>
<para>Эта библиотека компонуется с программой, когда для GCC указано <para>Эта библиотека компонуется с программой, когда в GCC включено профилирование</para>
использовать профилирование</para>
<indexterm zone="ch-system-gcc libgcov"> <indexterm zone="ch-system-gcc libgcov">
<primary sortas="c-libgcov">libgcov</primary> <primary sortas="c-libgcov">libgcov</primary>
</indexterm> </indexterm>
@ -528,7 +551,7 @@ mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
<varlistentry id="liblto_plugin"> <varlistentry id="liblto_plugin">
<term><filename class="libraryfile">liblto_plugin</filename></term> <term><filename class="libraryfile">liblto_plugin</filename></term>
<listitem> <listitem>
<para>Плагин GCC LTO позволяет binutils обрабатывать объектные файлы, <para>Плагин GCC LTO позволяет Binutils обрабатывать объектные файлы,
созданные GCC с включенным LTO.</para> созданные GCC с включенным LTO.</para>
<indexterm zone="ch-system-gcc liblto_plugin"> <indexterm zone="ch-system-gcc liblto_plugin">
<primary sortas="c-liblto_plugin">liblto_plugin</primary> <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"> <varlistentry id="libssp">
<term><filename class="libraryfile">libssp</filename></term> <term><filename class="libraryfile">libssp</filename></term>
<listitem> <listitem>
<para>Содержит подпрограммы, поддерживающие функциональность защиты стека GCC.</para> <para>Содержит подпрограммы, поддерживающие функциональность защиты стека GCC.
Обычно они не используются, потому что Glibc также предоставляет эти подпрограммы.</para>
<indexterm zone="ch-system-gcc libssp"> <indexterm zone="ch-system-gcc libssp">
<primary sortas="c-libssp">libssp</primary> <primary sortas="c-libssp">libssp</primary>
</indexterm> </indexterm>

View File

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

View File

@ -337,7 +337,7 @@ chmod -v 0755 /usr/lib/preloadable_libintl.so</userinput></screen>
<varlistentry id="libasprintf"> <varlistentry id="libasprintf">
<term><filename class="libraryfile">libasprintf</filename></term> <term><filename class="libraryfile">libasprintf</filename></term>
<listitem> <listitem>
<para>определяет класс <emphasis>autosprintf</emphasis>, который делает <para>Определяет класс <emphasis>autosprintf</emphasis>, который делает
подпрограммы вывода в формате C пригодными для использования в программах подпрограммы вывода в формате C пригодными для использования в программах
на C++ для использования со строками <emphasis>&lt;string&gt;</emphasis> и на C++ для использования со строками <emphasis>&lt;string&gt;</emphasis> и
потоками <emphasis>&lt;iostream&gt;</emphasis></para> потоками <emphasis>&lt;iostream&gt;</emphasis></para>
@ -350,9 +350,8 @@ chmod -v 0755 /usr/lib/preloadable_libintl.so</userinput></screen>
<varlistentry id="libgettextlib"> <varlistentry id="libgettextlib">
<term><filename class="libraryfile">libgettextlib</filename></term> <term><filename class="libraryfile">libgettextlib</filename></term>
<listitem> <listitem>
<para>Приватная библиотека, в которой находятся общие подпрограммы, <para>Содержит общие подпрограммы, используемые различными программами
используемые в различных программах Gettext; они не предназначены Gettext; они не предназначены для общего использования</para>
для общего использования</para>
<indexterm zone="ch-system-gettext libgettextlib"> <indexterm zone="ch-system-gettext libgettextlib">
<primary sortas="c-libgettextlib">libgettextlib</primary> <primary sortas="c-libgettextlib">libgettextlib</primary>
</indexterm> </indexterm>
@ -376,9 +375,8 @@ chmod -v 0755 /usr/lib/preloadable_libintl.so</userinput></screen>
<varlistentry id="libgettextsrc"> <varlistentry id="libgettextsrc">
<term><filename class="libraryfile">libgettextsrc</filename></term> <term><filename class="libraryfile">libgettextsrc</filename></term>
<listitem> <listitem>
<para>Приватная библиотека, в которой находятся общие подпрограммы, <para>Предоставляет общие подпрограммы, используемые различными программами
используемые в различных программах Gettext; они не предназначены Gettext; они не предназначены для общего использования</para>
для общего использования</para>
<indexterm zone="ch-system-gettext libgettextsrc"> <indexterm zone="ch-system-gettext libgettextsrc">
<primary sortas="c-libgettextsrc">libgettextsrc</primary> <primary sortas="c-libgettextsrc">libgettextsrc</primary>
</indexterm> </indexterm>