lfs-ru/chapter08/libffi.xml

127 lines
5.4 KiB
XML
Raw Permalink Normal View History

<?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-libffi" role="wrap">
<?dbhtml filename="libffi.html"?>
<sect1info condition="script">
<productname>libffi</productname>
<productnumber>&libffi-version;</productnumber>
<address>&libffi-url;</address>
</sect1info>
<title>Libffi-&libffi-version;</title>
<indexterm zone="ch-system-libffi">
<primary sortas="a-libffi">libffi</primary>
</indexterm>
<sect2 role="package">
<title/>
<para>Библиотека Libffi предоставляет переносимый высокоуровневый программный
интерфейс для различных соглашений о вызовах. Это позволяет программисту вызывать
любую функцию, указанную в описании интерфейса вызова во время выполнения.</para>
<para>FFI расшифровывается как интерфейс внешних функций. FFI позволяет программе,
написанной на одном языке, вызывать программу, написанную на другом языке. В
частности, Libffi может обеспечить связь между интерпретатором, таким как Perl или
Python, и подпрограммами общей библиотеки, написанными на C или C++.</para>
<segmentedlist>
<segtitle>&buildtime;</segtitle>
<segtitle>&diskspace;</segtitle>
<seglistitem>
<seg>&libffi-fin-sbu;</seg>
<seg>&libffi-fin-du;</seg>
</seglistitem>
</segmentedlist>
</sect2>
<sect2 role="installation">
<title>Установка пакета Libffi</title>
<note>
<para>Как и GMP, Libffi собирается с учетом оптимизаций, специфичных для используемого
процессора. При сборке для другой системы измените значение параметра
<parameter>--with-gcc-arch=</parameter> в следующей команде на имя архитектуры,
полностью реализованной процессором в этой системе. Если этого не сделать,
все приложения, ссылающиеся на <filename class='libraryfile'>libffi</filename>,
будут вызывать ошибку <quote>Illegal Operation - недопустимая операция</quote>.</para>
</note>
<para>Подготовьте Libffi к компиляции:</para>
<screen><userinput remap="configure">./configure --prefix=/usr \
--disable-static \
--with-gcc-arch=native</userinput></screen>
<variablelist>
<title>Значение параметров configure:</title>
<varlistentry>
<term><parameter>--with-gcc-arch=native</parameter></term>
<listitem>
<para>Убедитесь, что GCC оптимизируется для текущей системы. Если значение
не указано, то архитектура системы угадывается и сгенерированный код может
быть неправильным. Если сгенерированный код будет скопирован из родной
системы в менее мощную, используйте архитектуру менее мощной системы в качестве
параметра. Дополнительные сведения об альтернативных типах систем смотрите в
<ulink url='https://gcc.gnu.org/onlinedocs/gcc-&gcc-version;/gcc/x86-Options.html'>
описании параметров x86 в руководстве GCC</ulink>.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Скомпилируйте пакет:</para>
<screen><userinput remap="make">make</userinput></screen>
<para>Чтобы протестировать пакет, выполните:</para>
<screen><userinput remap="test">make check</userinput></screen>
<para>Установите пакет:</para>
<screen><userinput remap="install">make install</userinput></screen>
</sect2>
<sect2 id="contents-libffi" role="content">
<title>Содержимое пакета Libffi</title>
<segmentedlist>
2023-08-03 23:54:52 +03:00
<segtitle>Установленные библиотеки</segtitle>
<seglistitem>
<seg>libffi.so</seg>
</seglistitem>
</segmentedlist>
<variablelist>
<bridgehead renderas="sect3">Краткое описание</bridgehead>
<?dbfo list-presentation="list"?>
<?dbhtml list-presentation="table"?>
<varlistentry id="libffi">
<term><filename class="libraryfile">libffi</filename></term>
<listitem>
<para>Содержит внешний интерфейс для API-функций</para>
<indexterm zone="ch-system-libffi">
<primary sortas="c-libffi">libffi</primary>
</indexterm>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>