Wie füge ich Include- und Lib-Pfade hinzu, um den Zyklus zu konfigurieren / zu erstellen?

82

Ich brauche einen Ort, an dem ich Bibliotheken in einer Linux-Box installieren kann, auf die ich keinen Zugriff habe. Ich verwende ~ / local [/ bin, / lib, / include], aber ich weiß nicht, wie ich ./configure anweisen kann, dort nach Bibliotheken zu suchen (insbesondere versuche ich, Emacs zu kompilieren, die libgif benötigen , was nicht in meiner Distribution kommt).

Ich habe versucht hinzuzufügen

export PATH=$PATH:~/local/bin
export LD_LIBRARY_PATH=~/local/lib
export C_INCLUDE_PATH=~/local/include
export CPLUS_INCLUDE_PATH=~/local/include

zu .bashrc, aber es scheint nicht zu funktionieren.

Lacrymology
quelle
4
Beachten Sie, dass Sie mit Ausnahme des Pfads die Standardeinstellungen Ihres Systems überschreiben. Wenn Sie so etwas machen export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH, sucht Ihr Compiler zuerst in ~/local/includeund in $ C_INCLUDE_PATH nur, wenn er das Include im ersten Verzeichnis nicht gefunden hat.
Marc Plano-Lesay

Antworten:

99

Sie möchten eine config.site-Datei. Versuchen:

$ mkdir -p ~ / local / share
$ cat << EOF> ~ / local / share / config.site
CPPFLAGS = -I $ HOME / local / include
LDFLAGS = -L $ HOME / local / lib
...
EOF

Immer wenn Sie ein automatisch konfiguriertes Konfigurationsskript mit --prefix = $ HOME / local aufrufen, wird die config.site gelesen und alle Zuweisungen werden für Sie vorgenommen. CPPFLAGS und LDFLAGS sollten alles sein, was Sie brauchen, aber Sie können auch andere gewünschte Zuordnungen vornehmen (daher die ... im obigen Beispiel). Beachten Sie, dass -I-Flags zu CPPFLAGS und nicht zu CFLAGS gehören, da -I für den Vorprozessor und nicht für den Compiler vorgesehen ist.

William Pursell
quelle
Wilhelm; Ein Dankeschön, das war ein Ratschlag zu CPPFLAGS für den Aufbau auf einem gemeinsamen Host. Aufgrund fehlgeschlagener ./configure-Läufe wurde aufgrund Ihrer Notiz viel Zeit gespart.
Brian Tiffin
30

Legen Sie LDFLAGS und CFLAGS fest, wenn Sie make ausführen:

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

Wenn Sie dies nicht millionenfach tun möchten, exportieren Sie diese in Ihre .bashrc (oder Ihr Shell-Äquivalent). Setzen Sie LD_LIBRARY_PATH außerdem auf / home / me / local / lib:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib
long404
quelle
Wenn ich LDFLAGS und CFLAGS zu .bashrc hinzufüge ./configure schlägt mit einem configure fehl: Fehler: C-Compiler kann keine ausführbaren
Dateien
Sie überschreiben wahrscheinlich die Parameter des konfigurierten Testcode-Compilers. Verwenden Sie einfach das Prefetching make env. Versuchen Sie auch zu prüfen, ob configure noch keine Option zum Überschreiben von libgif enthält. Wenn die Autotools-Skripte ordnungsgemäß erstellt wurden, können Sie einen Pfad angeben, in dem libgif installiert ist (z. B. den Standardspeicherort der Bibliothek überschreiben). Das wäre die sauberere Lösung.
Long404
gleicher Unterschied .. tneme @ ws16lab07: ~ / Descargas / emacs-23.3 $ LDFLAGS = "- L / home / tneme / local / lib" CFLAGS = "- l / home / tneme / local / include" ./configure --prefix = "/ home / tneme / local" Überprüfung des Build-Systemtyps ... i686-pc-linux-gnu Überprüfung des Host-Systemtyps ... i686-pc-linux-gnu Überprüfung auf gcc ... gcc Überprüfung, ob der C-Compiler funktioniert ... no configure: error: in /home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log 'für weitere Details t
Lacrymology
Diese sollten definiert werden, wenn Sie "machen", nicht wenn Sie "konfigurieren".
Long404
Ich habe gerade versucht, Emacs 23 mit diesen zu konfigurieren, und das Problem ist nicht aufgetreten: LDFLAGS = "- L / home / me / local / lib" CFLAGS = "- I / home / me / local / include" ./configure Überprüfung des Build-Systems Typ ... x86_64-unknown-linux-gnu Überprüfung des Host-Systemtyps ... x86_64-unknown-linux-gnu Überprüfung auf gcc ... gcc Überprüfung auf C-Compiler Standardausgabedateiname ... a.out Überprüfung, ob die C. Der Compiler funktioniert ... ja, ob das Cross-Compilieren durchgeführt wird ... nein, das Suffix der ausführbaren Dateien wird überprüft ... das Suffix der Objektdateien wird überprüft ... o wird geprüft, ob der GNU C-Compiler verwendet wird ... yes
long404
8

Es dauerte eine Weile, bis alles richtig war. Ich hatte dieses Problem beim Cross-Compilieren in Ubuntu für ein ARM-Ziel. Ich habe es gelöst mit:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf

Hinweis CFLAGS wird nicht mit autogen.sh/configure verwendet. Bei Verwendung von CFLAGS wurde der Fehler angezeigt: "configure: error: C-Compiler kann keine ausführbaren Dateien erstellen". In der Build-Umgebung wurde ein autogen.sh-Skript bereitgestellt, wenn Sie keinen autogen.sh-Skriptersatz haben ./autogen.sh durch ./configure im obigen Befehl. Ich habe config.guess auf dem Zielsystem ausgeführt, um den Parameter --host abzurufen.

Kompilieren Sie nach erfolgreicher Ausführung von autogen.sh/configure mit:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make

Die CFLAGS, die ich verwendet habe, waren: "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s". Es wird eine Weile dauern, bis alle Include-Verzeichnisse korrekt eingerichtet sind: Möglicherweise möchten einige Includes auf Ihren Cross-Compiler und andere auf Ihre Root-Dateisystem-Includes verweisen, und es wird wahrscheinlich zu Konflikten kommen.

Ich bin sicher, dass dies nicht die perfekte Antwort ist. Und ich sehe immer noch einige Include-Verzeichnisse, die auf / und nicht / ccrootfs in den Makefiles verweisen. Würde gerne wissen, wie man das korrigiert. Hoffe das hilft jemandem.

Samuel
quelle