Schließlich dachte ich, den richtigen Weg, um es zu tun, ich habe die --prefix
Option der sagen kann ich configure Datei mit denen der Bibliothek setzen/installieren. Das Problem über die Installation war, dass ich andere Verzeichnisse nicht das Recht haben, für den Zugriff als mein $HOME
, also kein Problem dies zu tun:
configure --prefix=$HOME/libreadline && make && make install-static
Dann in meinem Programm schließe ich die Datei von $HOME/libreadline/include
.
Um das Hauptprogramm zu kompilieren, verknüpfe ich das Programm mit den Archivbibliotheken $HOME/libreadline/lib/libreadline.a
und $HOME/libreadline/lib/libhistory.a
.
Da readline files Anweisungen wie #include <readline/readline.h>
verwendet, die nicht dem Speicherort der Dateien entsprechen, muss ich dem Compiler mitteilen, wo nach den enthaltenen Dateien gesucht werden soll. Um dies zu tun, setze ich vor der Ausführung von gcc die Variable C_INCLUDE_PATH
auf $HOME/libreadline/include
.
Schließlich, da readline die dynamische Bibliothek ncurses verwendet, muss ich dem Compiler mitteilen, dass er dynamisch mit meinem Programm verknüpft werden soll. Es könnte der Fall von termcap sein ...
Der Gesamtprozess wie folgt aussieht:
configure --prefix=$HOME/libreadline && make && make install-static
export C_INCLUDE_PATH=$HOME/libreadline/include
gcc -o myprogram myprogram.c $HOME/libreadline/lib/libreadline.a $HOME/libreadline/libhistory.a -lncurses -ltermcap
Ich war verwirrt darüber, was tun make install
, kopieren Sie nur Dateien auf den Standort der configure vorgesehen, Standardmäßig wird es in Systemverzeichnissen wie /usr/include usw. installiert.aber mit der --prefix
Option make install kopiert alle Dateien im angegebenen Verzeichnis.
Die Installation kopiert nur kompilierte Programme, Bibliotheken, Dokumente usw. an einen bestimmten Speicherort, standardmäßig Standard-Systemverzeichnisse, wenn Sie keinen Zugriff auf diese Verzeichnisse wie ich haben, können Sie es in Ihrem eigenen Verzeichnis installieren und dann tu, was immer du willst.
ich die dynamische Bibliothek stattdessen die statische, installiert haben könnte, aber dann würde ich die LD_LIBRARY_PATH
Umgebung ändern müssen.
„Die Make-Datei“ bezeichnete in dieser Seite ist die Make-Datei für ProFit, nicht die Make-Datei für die Readline-Bibliothek. Um Readline aus der Quelle zu kompilieren, müssen Sie die Readline-Quelle holen und sie dann kompilieren - Sie können sie nicht aus der Quelle kompilieren, indem Sie etwas in Ihr * eigenes * Makefile einfügen. Wenn Sie Linux verwenden, ist die Wahrscheinlichkeit groß, dass Sie die statischen Bibliotheken einfach von Ihrem Paketmanager abrufen können, ohne sie kompilieren zu müssen. –
Readline kommt mit einem * configure * und * Makefile *, um es zu kompilieren muss ich nur 'configure' und' make' ausführen ohne die 'make install'? Was ist das Ergebnis von 'configure && make' und was macht' make install'? Ich habe versucht, es zu verstehen, indem ich das Makefile lese, aber es ist ziemlich komplex. –
'configure' generiert automatisch das Makefile,' make' erstellt die Bibliothek und 'make install' installiert es. Sie werden alle drei Dinge tun müssen - wenn Sie readline verwenden möchten, gibt es keinen Grund, es nicht zu installieren. Sie müssen das Makefile nicht verstehen - Sie müssen nur die Installationsanweisungen verstehen und befolgen. –