我尝试编译程序检验李氏准则在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
您还可以在不安装 Arb 的情况下构建库并运行示例程序,方法是告诉链接器它可以在源目录中找到 libarb.so:
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
脚本将对您的系统运行检查,以确保它可以编译和链接您正在构建的库。如果失败,您必须先安装所有必需的依赖项,然后才能继续。有些依赖项可能以二进制包的形式提供(请参阅您的发行版的文档),有些可能不会(在这种情况下,您必须阅读它们的说明,通常是库存档中的自述文件或安装文件)。根据 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 的更多信息,请查看这一页。您还可以找到有关安装 Arb 作为 Flint 扩展的信息,以及针对此特定情况编译说明的信息。