C プログラムを Arb ライブラリにリンクするにはどうすればよいですか?

C プログラムを Arb ライブラリにリンクするにはどうすればよいですか?

プログラムをコンパイルしようとした李の基準のテストUbuntuでは、しかし、実行するとgcc demo.c、次のような出力が得られます。

demo.c:2:19: fatal error: fmpcb.h: No such file or directory
 #include "fmpcb.h"
                   ^
compilation terminated.

そのプログラムをコンパイルするにはどうすればいいでしょうか? コンパイルを機能させるには bash スクリプトが必要だと思います。

答え1

ファイル fmpcb.h は、Arb の最新バージョンには存在しません。Arb 1.x の fmprb_t および fmpcb_t タイプは、Arb 2.x の (より効率的な) arb_t および acb_t タイプによって廃止されました。最新リリースでは、従来の fmpcb_t タイプは完全に削除されました。

fmprb -> arb と fmpcb -> acb を置き換え、必要に応じてその他の小さな調整を加えることで、そのブログ投稿のコードが機能するようになるはずです。

ただし、より良い解決策は、Arb に含まれている Keiper-Li サンプル プログラムを使用することです。

https://github.com/fredrik-johansson/arb/blob/master/examples/keiper_li.c

これは基本的に、ブログ記事のプログラムの改良版です。より高速で、マルチスレッドをサポートし、再コンパイルする代わりにコマンドラインで引数を渡すことができ、現在のインターフェースに合わせて最新の状態になっています。

Arb ソース ディレクトリから、次のようにサンプル プログラムをビルドして実行できます (Arb がすでにインストールされていると仮定します)。

cd /home/user/src/arb
make examples
build/examples/keiper_li 100

また、リンカーにソース ディレクトリで libarb.so が見つかるということを伝えることで、Arb をインストールせずにライブラリをビルドし、サンプル プログラムを実行することもできます。

cd /home/user/src/arb
make
export LD_LIBRARY_PATH=/home/user/src/arb:$LD_LIBRARY_PATH
make examples
build/examples/keiper_li 100

Arb サンプル プログラムのドキュメントについては、以下を参照してください。http://fredrikj.net/arb/examples.html

答え2

ファイルfmpcb.hはCインクルードパスに見つかりません。また、ここで括弧の代わりに引用符を使うのはおそらく悪い考えでしょうビルドしようとしているこのテストは、おそらくコンパイルされることを意図しています平行Arb ライブラリでは、著者が引用符を使用しているのはこのためです。

まず最初に、このヘッダーファイルを提供するパッケージをインストールします(もちろん、関連するライブラリがある場合はそれも)。このファイルはArbライブラリによって提供されるようです。ここからダウンロード(ZIPをダウンロード)アーカイブをダウンロードして解凍したら、そのディレクトリに移動して次のように入力します。

$ ./configure
$ make
$ sudo make install

スクリプトconfigureはシステムをチェックし、ビルド中のライブラリをコンパイルしてリンクできるかどうかを確認します。失敗した場合は、先に進む前に必要な依存関係をすべてインストールする必要があります。依存関係の中にはバイナリ パッケージとして提供されるもの (ディストリビューションのドキュメントを参照) もあれば、提供されないものもあります (その場合は、ライブラリ アーカイブ内の README または INSTALL ファイルに記載されている手順を読む必要があります)。Arb の Git ページによると、インストールする必要があるのは以下のとおりです。

ArbはFLINTに依存します(http://flintlib.org/)、MPIR(http://mpir.org) および MPFR (http://mpfr.org) スタンドアロン ライブラリとして構築することも、オプションの拡張パッケージとして FLINT の一部として構築することもできます。

サイドノート:私の Ubuntu システムは、libflint (libflint-dev) と MPFR (libmpfr-dev) のバイナリ パッケージを提供しています。次のコマンドでインストールできます。

$ sudo apt-get install libflint-dev libmpfr-dev

(もちろんパッケージマネージャがそうであればapt-get)。MPIRはここからダウンロード、別の典型的なを使用してインストールされます./configure && make && sudo make install。によるとMPIRドキュメントライブラリをコンパイルする前にインストールする依存関係はありません。全体として:

  • libflint-devを使用してと をインストールlibmpfr-devするapt-getか、依存関係がある場合はそれぞれの依存関係とともに自分でコンパイルします。
  • MPIR ライブラリをダウンロードし、コンパイルして (README ファイルまたは上記でリンクしたドキュメント PDF を参照)、インストールします。
  • Arb ライブラリをダウンロードし、コンパイルしてインストールします。

Arb ライブラリがビルドされ、システムにインストールされると、fmpcb.hファイルは で利用できるようになります/usr/local/include/fmpcb.h(ディストリビューションが別のパスを使用している場合を除く)。ライブラリ ファイルは にも見つかります/usr/local/lib。ヘッダー ファイルはシステム ディレクトリ (C インクルード パス) にあるため、コードでは引用符ではなく角括弧を使用する必要があります。

#include <fmpcb.h>

ここで、新しくインストールされたライブラリをコンパイルしてリンクしたい場合は、コンパイラにそのように指示する必要があります。

$ gcc -I/usr/local/include -L/usr/local/lib -larb yourprogram.c -o yourprogram
$ ./yourprogram

Arbのインストール方法の詳細については、以下をご覧ください。このページまた、Flint の拡張機能としての Arb のインストールに関する情報や、この特定の状況でのコンパイル手順も記載されています。

関連情報