如何將我的 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

您也可以在不安裝 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-devlibmpfr-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 擴充功能的信息,以及針對此特定情況編譯說明的資訊。

相關內容