lfs-ru/chapter08/gmp.xml
2024-02-12 01:28:02 +05:00

297 lines
12 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-system-gmp" role="wrap">
<?dbhtml filename="gmp.html"?>
<sect1info condition="script">
<productname>gmp</productname>
<productnumber>&gmp-version;</productnumber>
<address>&gmp-url;</address>
</sect1info>
<title>GMP-&gmp-version;</title>
<indexterm zone="ch-system-gmp">
<primary sortas="a-GMP">GMP</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>Пакет GMP содержит математические библиотеки. Они содержат полезные функции
для арифметики с произвольной точностью.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&gmp-fin-sbu;</seg>
<seg>&gmp-fin-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Установка пакета GMP</title>
<note>
<para>Если вы выполняете сборку для 32-разрядной архитектуры x86, но ваш
процессор, способен выполнять 64-разрядный код, <emphasis>и</emphasis> вы
указали в переменных окружения <envar>CFLAGS</envar>, скрипт configure
попытается выполнить настройку для 64-разрядной системы и завершится ошибкой.
Чтобы избежать этого, необходимо вызвать команду configure с приведенным ниже параметром
<screen role="nodump"><userinput><parameter>ABI=32</parameter> ./configure ...</userinput></screen></para>
</note>
<note>
<para>Настройки GMP по умолчанию собирают библиотеки, оптимизированные для
процессора хоста. Если требуются библиотеки, подходящие для процессоров с
меньшей производительностью, чем у процессора хоста, можно собрать
общие библиотеки, добавив параметр <option>--host=none-linux-gnu</option> в
команде <command>configure</command>.</para>
<!-- To editors: the configure script says "the none host is obsolete,
use - -disable-assembly", but don't believe it: with the latter
CFLAGS is still automatically set to -march=something. -->
</note>
<para>Подготовьте GMP к компиляции:</para>
<screen><userinput remap="configure">./configure --prefix=/usr \
--enable-cxx \
--disable-static \
--docdir=/usr/share/doc/gmp-&gmp-version;</userinput></screen>
<variablelist>
<title>Значение новых параметров настройки:</title>
<varlistentry>
<term><parameter>--enable-cxx</parameter></term>
<listitem>
<para>Этот параметр включает поддержку C++</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>--docdir=/usr/share/doc/gmp-&gmp-version;</parameter></term>
<listitem>
<para>Эта переменная указывает местоположение для документации.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Скомпилируйте пакет и сгенерируйте HTML-документацию:</para>
<screen><userinput remap="make">make
make html</userinput></screen>
<important>
<para>Набор тестов для GMP в этом разделе считается критически важным.
Ни в коем случае не пропускайте его.</para>
</important>
<para>Проверьте результаты:</para>
<screen><userinput remap="test">make check 2>&amp;1 | tee gmp-check-log</userinput></screen>
<caution><para>Код в GMP сильно оптимизирован для процессора, на котором он
собран. Иногда код, определяющий процессор, неверно определяет возможности
системы, и в тестах или других приложениях, использующих библиотеки gmp, возникают
ошибки с сообщением <computeroutput>Illegal instruction</computeroutput>. В этом случае
gmp следует переконфигурировать с параметром <option>--host=none-linux-gnu</option> и
пересобрать.</para></caution>
<!-- Some tests PASS on a specific uarch but SKIP on other CPUs.
For example on K8 the following command outputs 200. -->
<para>Убедитесь, что все 199 тестов в наборе пройдены. Проверьте результат, выполнив
следующую команду:</para>
<screen><userinput remap="test">awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log</userinput></screen>
<para>Установите пакет и его документацию:</para>
<screen><userinput remap="install">make install
make install-html</userinput></screen>
</sect2>
<!-- - - - - - - - - - -->
<!-- Multilib - 32bit -->
<!-- - - - - - - - - - -->
<sect2 arch="ml_32,ml_all" role="installation">
<title>Установка GMP - 32-битная версия</title>
<para>Выполните очистку после предыдущей сборки:</para>
<screen><userinput remap="pre">make distclean</userinput></screen>
<para>Универсальные библиотеки можно создать, выполнив следующие действия:</para>
<screen role="nodump"><userinput remap="pre">cp -v configfsf.guess config.guess
cp -v configfsf.sub config.sub</userinput></screen>
<para>Подготовьте GMP к компиляции:</para>
<screen><userinput remap="configure">ABI="32" \
CFLAGS="-m32 -O2 -pedantic -fomit-frame-pointer -mtune=generic -march=i686" \
CXXFLAGS="$CFLAGS" \
PKG_CONFIG_PATH="/usr/lib32/pkgconfig" \
./configure \
--host=i686-pc-linux-gnu \
--prefix=/usr \
--disable-static \
--enable-cxx \
--libdir=/usr/lib32 \
--includedir=/usr/include/m32/gmp</userinput></screen>
<variablelist>
<title>Значение новых параметров настройки:</title>
<varlistentry>
<term><parameter>--includedir=/usr/include/m32/gmp</parameter></term>
<listitem>
<para>Некоторые определения в gmp.h различаются в зависимости от архитектуры,
но имеют одно и то же имя. Поэтому заголовки должны быть отделены друг от друга.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">sed -i 's/$(exec_prefix)\/include/$\(includedir\)/' Makefile
make</userinput></screen>
<important>
<para>Набор тестов для GMP, приведенный в этом разделе, считается критически важным.
Не пропускайте его ни при каких обстоятельствах.</para>
</important>
<para>Проверьте результаты:</para>
<screen><userinput remap="test">make check 2>&amp;1 | tee gmp-check-log</userinput></screen>
<para>Убедитесь, что все 199 тестов в наборе пройдены. Проверьте результат,
выполнив следующую команду:</para>
<screen><userinput remap="test">awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log</userinput></screen>
<para>Установите пакет:</para>
<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install
cp -Rv DESTDIR/usr/lib32/* /usr/lib32
cp -Rv DESTDIR/usr/include/m32/* /usr/include/m32/
rm -rf DESTDIR</userinput></screen>
</sect2><!-- m32 -->
<!-- - - - - - - - - - -->
<!-- Multilib - x32bit -->
<!-- - - - - - - - - - -->
<sect2 arch="ml_x32,ml_all" role="installation">
<title>Установка GMP - с поддержкой x32 ABI</title>
<para>Выполните очистку после предыдущей сборки:</para>
<screen><userinput remap="pre">make distclean</userinput></screen>
<para>Универсальные библиотеки можно создать, выполнив следующие действия:</para>
<screen role="nodump"><userinput remap="pre">cp -v configfsf.guess config.guess
cp -v configfsf.sub config.sub</userinput></screen>
<para>Подготовьте GMP к компиляции:</para>
<screen><userinput remap="configure">ABI="x32" \
CFLAGS="-mx32 -O2 -pedantic -fomit-frame-pointer -mtune=generic -march=x86-64" \
CXXFLAGS="$CFLAGS" \
PKG_CONFIG_PATH="/usr/libx32/pkgconfig" \
./configure \
--host=x86_64-pc-linux-gnux32 \
--prefix=/usr \
--disable-static \
--enable-cxx \
--libdir=/usr/libx32 \
--includedir=/usr/include/mx32/gmp</userinput></screen>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">sed -i 's/$(exec_prefix)\/include/$\(includedir\)/' Makefile
make</userinput></screen>
<important>
<para>Набор тестов для GMP, приведенный в этом разделе, считается критически важным.
Не пропускайте его ни при каких обстоятельствах.</para>
</important>
<para>Проверьте результаты:</para>
<screen><userinput remap="test">make check 2>&amp;1 | tee gmp-check-log</userinput></screen>
<para>Убедитесь, что все 199 тестов в наборе пройдены. Проверьте результат,
выполнив следующую команду:</para>
<screen><userinput remap="test">awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log</userinput></screen>
<para>Установите пакет:</para>
<screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install
cp -Rv DESTDIR/usr/libx32/* /usr/libx32
cp -Rv DESTDIR/usr/include/mx32/* /usr/include/mx32/
rm -rf DESTDIR</userinput></screen>
</sect2><!-- mx32 -->
<sect2 id="contents-gmp" role="content">
<title>Содержимое пакета GMP</title>
<segmentedlist>
<segtitle>Установленные библиотеки</segtitle>
<segtitle>Созданные каталоги</segtitle>
<seglistitem>
<seg>libgmp.so и libgmpxx.so</seg>
<seg>/usr/share/doc/gmp-&gmp-version;</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Краткое описание</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="libgmp">
<term><filename class="libraryfile">libgmp</filename></term>
<listitem>
<para>Содержит точные математические функции</para>
<indexterm zone="ch-system-gmp libgmp">
<primary sortas="c-libgmp">libgmp</primary>
</indexterm>
</listitem>
</varlistentry>
<varlistentry id="libgmpxx">
<term><filename class="libraryfile">libgmpxx</filename></term>
<listitem>
<para>Содержит точные математические функции C++</para>
<indexterm zone="ch-system-gmp libgmpxx">
<primary sortas="c-libgmpxx">libgmpxx</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>