mirror of
https://github.com/Poltern/lfs-ru.git
synced 2024-10-18 11:50:21 +03:00
Translated gcc, gdbm, gettext
This commit is contained in:
parent
3d13065e9a
commit
481074bd20
@ -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>
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<para>Пакет GDBM содержит менеджер баз данных GNU. Это библиотека функций
|
<para>Пакет GDBM содержит менеджер баз данных GNU. Это библиотека функций
|
||||||
базы данных, использующая расширяемое хеширование и работающая аналогично
|
базы данных, использующая расширяемое хеширование и работающая аналогично
|
||||||
стандартной UNIX dbm. Библиотека предоставляет примитивы для хранения пар
|
стандартной СУБД UNIX. Библиотека предоставляет примитивы для хранения пар
|
||||||
ключ/значение, поиска и извлечения данных по его ключу и удаления ключа
|
ключ/значение, поиска и извлечения данных по его ключу и удаления ключа
|
||||||
вместе с его данными.</para>
|
вместе с его данными.</para>
|
||||||
|
|
||||||
|
@ -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><string></emphasis> и
|
на C++ для использования со строками <emphasis><string></emphasis> и
|
||||||
потоками <emphasis><iostream></emphasis></para>
|
потоками <emphasis><iostream></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>
|
||||||
|
Loading…
Reference in New Issue
Block a user