Wie kann ich mein C-Programm mit der Arb-Bibliothek verknüpfen?

Wie kann ich mein C-Programm mit der Arb-Bibliothek verknüpfen?

Ich habe versucht, das Programm zu kompilierenTesten des Li-Kriteriumsin Ubuntu. Wenn ich das jedoch mache gcc demo.c, erhalte ich die Ausgabe als:

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

Wie kann ich dieses Programm kompilieren? Ich glaube, ich brauche ein Bash-Skript, damit die Kompilierung funktioniert.

Antwort1

Die Datei fmpcb.h existiert in der neuesten Version von Arb nicht mehr. Die Typen fmprb_t und fmpcb_t in Arb 1.x wurden durch die (effizienteren) Typen arb_t und acb_t in Arb 2.x ersetzt. Die neueste Version hat den alten Typ fmpcb_t vollständig entfernt.

Sie sollten in der Lage sein, den Code aus diesem Blog-Beitrag zum Laufen zu bringen, indem Sie fmprb -> arb und fmpcb -> acb ersetzen und möglicherweise andere kleinere Anpassungen vornehmen.

Eine bessere Lösung ist jedoch die Verwendung des in Arb enthaltenen Keiper-Li-Beispielprogramms:

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

Dies ist im Grunde eine bessere Version des Programms im Blogbeitrag. Es ist schneller, unterstützt Multithreading, ermöglicht die Übergabe von Argumenten auf der Befehlszeile, anstatt es neu zu kompilieren, und es sollte mit der aktuellen Schnittstelle auf dem neuesten Stand sein.

Aus dem Arb-Quellverzeichnis können Sie das Beispielprogramm wie folgt erstellen und ausführen (vorausgesetzt, Arb wurde bereits installiert):

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

Sie können die Bibliothek auch erstellen und Beispielprogramme ausführen, ohne Arb zu installieren, indem Sie dem Linker mitteilen, dass er libarb.so im Quellverzeichnis finden kann:

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

Die Dokumentation der Arb-Beispielprogramme finden Sie unter:http://fredrikj.net/arb/examples.html

Antwort2

Die fmpcb.hDatei kann nicht im C-Include-Pfad gefunden werden. Außerdemdie Verwendung von Anführungszeichen anstelle von Klammern ist hier wahrscheinlich ebenfalls keine gute Idee. Dieser Test, den Sie erstellen möchten, soll wahrscheinlich kompiliert werdenentlangmit der Arb-Bibliothek, weshalb der Autor Anführungszeichen verwendet.

Als erstes installieren Sie das Paket, das diese Header-Datei bereitstellt (und natürlich die zugehörige Bibliothek, falls vorhanden). Diese Datei scheint von der Arb-Bibliothek bereitgestellt zu werden, diehier heruntergeladen (Download ZIP). Nachdem Sie das Archiv heruntergeladen und entpackt haben, gehen Sie in sein Verzeichnis und geben Sie Folgendes ein:

$ ./configure
$ make
$ sudo make install

Das configureSkript führt Prüfungen auf Ihrem System durch, um sicherzustellen, dass es die von Ihnen erstellte Bibliothek kompilieren und verknüpfen kann. Wenn dies fehlschlägt, müssen Sie alle erforderlichen Abhängigkeiten installieren, bevor Sie fortfahren können. Einige Abhängigkeiten werden möglicherweise als Binärpakete bereitgestellt (siehe die Dokumentation Ihrer Distribution), andere nicht (in diesem Fall müssen Sie deren Anweisungen lesen, normalerweise eine README- oder INSTALL-Datei im Bibliotheksarchiv). Laut der Git-Seite von Arb müssen Sie einige Installationen durchführen:

Arb hängt von FLINT ab (http://flintlib.org/), MPIR (http://mpir.org) und MPFR (http://mpfr.org). Es kann als eigenständige Bibliothek oder als optionales Erweiterungspaket als Teil von FLINT erstellt werden.

Randnotiz:Mein Ubuntu-System stellt Binärpakete für libflint (libflint-dev) und MPFR (libmpfr-dev) bereit. Sie können sie mit folgendem installieren:

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

(vorausgesetzt Ihr Paketmanager ist es apt-getnatürlich). MPIR kannhier heruntergeladenund mit einem anderen typischen installiert ./configure && make && sudo make install. Lautdie MPIR-Dokumentation, es gibt keine Abhängigkeit, die vor dem Kompilieren der Bibliothek installiert werden muss. Alles in allem:

  • Installieren libflint-devund libmpfr-devverwenden Sie apt-getoder kompilieren Sie sie selbst zusammen mit den jeweiligen Abhängigkeiten, sofern vorhanden.
  • Laden Sie die MPIR-Bibliothek herunter, kompilieren Sie sie (siehe die README-Datei oder die oben verlinkte Dokumentations-PDF) und installieren Sie sie.
  • Laden Sie die Arb-Bibliothek herunter, kompilieren und installieren Sie sie.

Sobald die Arb-Bibliothek erstellt und auf Ihrem System installiert wurde, fmpcb.hsollte die Datei unter verfügbar sein /usr/local/include/fmpcb.h(außer wenn Ihre Distribution einen anderen Pfad verwendet). Sie finden die Bibliotheksdateien auch unter /usr/local/lib. Da sich die Header-Datei in einem Systemverzeichnis (C-Include-Pfad) befindet, müssen Sie in Ihrem Code Klammern statt Anführungszeichen verwenden:

#include <fmpcb.h>

Wenn Sie diese neu installierte Bibliothek nun kompilieren und verknüpfen möchten, müssen Sie den Compiler dazu anweisen:

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

Weitere Informationen zur Installation von Arb finden Sie unterdiese Seite. Sie finden dort auch Informationen zur Installation von Arb als Erweiterung von Flint sowie Kompilierungsanweisungen für diesen speziellen Fall.

verwandte Informationen