lfs-ru/chapter05/libstdc++.xml
2023-09-21 12:38:17 +05:00

150 lines
6.5 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<sect1 id="ch-tools-libstdcpp" role="wrap">
<?dbhtml filename="gcc-libstdc++.html"?>
<sect1info condition="script">
<productname>gcc-libstdc++</productname>
<productnumber>&gcc-version;</productnumber>
<address>&gcc-url;</address>
</sect1info>
<title>Libstdc++ из GCC-&gcc-version;</title>
<indexterm zone="ch-tools-libstdcpp">
<primary sortas="a-GCC">GCC</primary>
<secondary>tools, libstdc++ Проход 1</secondary>
</indexterm>
<sect2 role="package">
<title/>
<para>Libstdc++ — это стандартная библиотека C++. Она нужна для компиляции
кода C++ (часть GCC написана на C++), когда мы собирали <xref linkend="ch-tools-gcc-pass1"/>,
нам пришлось отложить её установку, потому что она зависит от библиотеки Glibc,
которой еще не было в целевом каталоге.
</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&libstdcpp-tmpp1-sbu;</seg>
<seg>&libstdcpp-tmpp1-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Установка библиотеки Libstdc++</title>
<note>
<para><application>Libstdc++</application> является частью исходников GCC.
Сначала вы должны распаковать архив GCC и перейти в каталог
<filename>gcc-&gcc-version;</filename>.</para>
</note>
<para>Создайте отдельный каталог сборки для libstdc++ и перейдите в него:</para>
<screen><userinput remap="pre">mkdir -v build
cd build</userinput></screen>
<para>Подготовьте libstdc++ к компиляции:</para>
<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../libstdc++-v3/configure \
--host=$LFS_TGT \
--build=$(../config.guess) \
--prefix=/usr \
--enable-multilib \
--disable-nls \
--disable-libstdcxx-pch \
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</userinput></screen>
<screen arch="default"><userinput remap="configure">../libstdc++-v3/configure \
--host=$LFS_TGT \
--build=$(../config.guess) \
--prefix=/usr \
--disable-multilib \
--disable-nls \
--disable-libstdcxx-pch \
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</userinput></screen>
<variablelist>
<title>Значение параметров настройки:</title>
<varlistentry>
<term><parameter>--host=...</parameter></term>
<listitem>
<para>Указывает, что должен использоваться кросс-компилятор, который мы только
что собрали, вместо того, который находится в
<filename>/usr/bin</filename>.</para>
</listitem>
</varlistentry>
<varlistentry arch="ml_32,ml_x32,ml_all">
<term><parameter>--enable-multilib</parameter></term>
<listitem>
<para>Включает сборку объектов multilib.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--disable-libstdcxx-pch</parameter></term>
<listitem>
<para> Этот аргумент предотвращает установку предварительно скомпилированных
include-файлов, которые на данном этапе не нужны.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/&gcc-version;</parameter></term>
<listitem>
<para>Указывает каталог установки для include-файлов. Поскольку libstdc++
является стандартной библиотекой C++ для LFS, этот каталог должен
соответствовать местоположению, в котором компилятор C++
(<command>$LFS_TGT-g++</command>) будет искать стандартные включаемые
файлы C++. При обычной сборке эта информация автоматически передается в Libstdc++
при выполнении <command>configure</command> из каталога верхнего уровня.
В нашем случае эта информация должна быть указана явно. Компилятор C++ добавит
путь sysroot <filename class="directory">$LFS</filename> (указанный при сборке
GCC Проход 1) к пути поиска include-файлов, поэтому фактически он будет искать в
<filename class="directory">$LFS/tools/$LFS_TGT/include/c++/&gcc-version;</filename>.
Комбинация переменной <parameter>DESTDIR</parameter> (в приведенной ниже команде
<command>make install</command>) и этого аргумента обеспечивает установку
заголовочных файлов туда.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Скомпилируйте Libstdc++, выполнив:</para>
<screen><userinput remap="make">make</userinput></screen>
<para>Установите библиотеку:</para>
<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
<para>Удалите архивные файлы libtool, поскольку они потенциально опасны при
кросс-компиляции:</para>
<screen><userinput remap="install">rm -v $LFS/usr/lib/lib{stdc++{,exp,fs},supc++}.la</userinput></screen>
</sect2>
<sect2 role="content">
<title/>
<para>Подробная информация об этом пакете приведена в
<xref linkend="contents-gcc" role="."/></para>
</sect2>
</sect1>