<?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>

    <segmentedlist>
      <segtitle>&buildtime;</segtitle>
      <segtitle>&diskspace;</segtitle>

      <seglistitem>
        <seg>&libffi-ch6-sbu;</seg>
        <seg>&libffi-ch6-du;</seg>
      </seglistitem>
    </segmentedlist>

  </sect2>

  <sect2 role="installation">
    <title>安装 Libffi</title>

	<para>修改 Makefile ，将头文件安装到标准的
    <filename class="directory">/usr/include</filename> 目录，而不是
    <filename class="directory">/usr/lib/libffi-3.2.1/include</filename>。</para>

<screen><userinput remap="pre">sed -e '/^includesdir/ s/$(libdir).*$/$(includedir)/' \
    -i include/Makefile.in

sed -e '/^includedir/ s/=.*$/=@includedir@/' \
    -e 's/^Cflags: -I${includedir}/Cflags:/' \
    -i libffi.pc.in</userinput></screen>

    <para>准备安装 libffi：</para>

<screen><userinput remap="configure">./configure --prefix=/usr --disable-static --with-gcc-arch=native</userinput></screen>

    <variablelist>
      <title>The meaning of the configure option:</title>

      <varlistentry>
        <term><parameter>--with-gcc-arch=native</parameter></term>
        <listitem>
          <!--para>Ensure gcc optimizes for the current system.  If this
          is not specified, the system is guessed and the code generated
          may not be correct for some systems.  If the generated code
          will be copied from the native system to a less capable 
          system, use the less capable system as a parameter. For details 
          about alternative system types, see <ulink 
          url='https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/x86-Options.html'>
          the x86 options in the gcc manual</ulink>.</para-->
          <para>保证 gcc 为当前系统进行优化。如果不使用该选项，
          构建系统会猜测系统架构，在某些系统上可能生成不正确的代码。
          如果要将生成的代码从本地系统复制到指令集功能较弱的系统中，
          需要使用目标系统架构作为该选项的参数值，参阅
          <ulink url=
          'https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/x86-Options.html'>
          gcc 手册中提供的的 x86 选项</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>
      <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>包含 libffi API 函数</para>
          <indexterm zone="ch-system-libffi">
            <primary sortas="c-libffi">libffi</primary>
          </indexterm>
        </listitem>
      </varlistentry>
    </variablelist>

  </sect2>

</sect1>

