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.
export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH
, sucht Ihr Compiler zuerst in~/local/include
und in $ C_INCLUDE_PATH nur, wenn er das Include im ersten Verzeichnis nicht gefunden hat.Antworten:
Sie möchten eine config.site-Datei. Versuchen:
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.
quelle
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
quelle
/home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See
config.log 'für weitere Details tEs 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.
quelle