Jak dodać ścieżki dołączania i lib, aby skonfigurować / utworzyć cykl?

83

Potrzebuję miejsca do zainstalowania bibliotek w Linuksie, do którego nie mam dostępu su. Używam ~ / local [/ bin, / lib, / include], ale nie wiem jak mogę powiedzieć ./configure szukać tam bibliotek (szczególnie próbuję skompilować emacs, który wymaga libgif , który nie jest dostępny w mojej dystrybucji).

Próbowałem dodać

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

do .bashrc, ale wygląda na to, że nie działa.

Łakologia
źródło
4
Zauważ, że z wyjątkiem PATH, nadpisujesz domyślne ustawienia systemowe. Jeśli zrobisz coś podobnego export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH, Twój kompilator będzie szukał najpierw w ~/local/include, a w $ C_INCLUDE_PATH tylko wtedy, gdy nie znalazł uwzględnienia w pierwszym katalogu.
Marc Plano-Lesay

Odpowiedzi:

99

Chcesz plik config.site. Próbować:

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

Za każdym razem, gdy wywołasz skrypt konfiguracyjny wygenerowany przez autoconf z opcją --prefix = $ HOME / local, plik config.site zostanie odczytany i wszystkie przypisania zostaną wykonane za Ciebie. CPPFLAGS i LDFLAGS powinny być wszystkim, czego potrzebujesz, ale możesz również wykonać dowolne inne pożądane przypisania (stąd ... w powyższym przykładzie). Zauważ, że flagi -I należą do CPPFLAGS, a nie do CFLAGS, ponieważ -I jest przeznaczone dla preprocesora, a nie kompilatora.

William Pursell
źródło
William; Dziękuję, to była rada dotycząca CPPFLAGS do budowania na wspólnym hoście. Dzięki Twojej notatce zaoszczędzono wiele kłopotów dzięki nieudanym uruchomieniom ./configure.
Brian Tiffin
30

Ustaw LDFLAGS i CFLAGS podczas uruchamiania make:

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

Jeśli nie chcesz tego robić miliardy razy, wyeksportuj je do swojego .bashrc (lub odpowiednika w powłoce). Ustaw również LD_LIBRARY_PATH tak, aby zawierał / home / me / local / lib:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib
long404
źródło
kiedy dodam LDFLAGS i CFLAGS do .bashrc ./configure kończy się niepowodzeniem z konfiguracją: błąd: kompilator C nie może tworzyć plików wykonywalnych ...
Lacrymology
Prawdopodobnie zastępują one parametry kompilatora kodu testu configure. Po prostu użyj make env prefetching. Spróbuj także sprawdzić, czy w configure nie ma jeszcze opcji nadpisywania libgif. Jeśli skrypty autotools są poprawnie wykonane, pozwoli ci to określić ścieżkę, w której zainstalowany jest libgif (np. Nadpisanie domyślnej lokalizacji biblioteki). To byłoby czystsze rozwiązanie.
long404
ta sama różnica .. tneme @ ws16lab07: ~ / Descargas / emacs-23.3 $ LDFLAGS = "- L / home / tneme / local / lib" CFLAGS = "- l / home / tneme / local / include" ./configure --prefix = "/ home / tneme / local" sprawdzanie typu budowania systemu ... i686-pc-linux-gnu sprawdzanie typu systemu hosta ... i686-pc-linux-gnu sprawdzanie gcc ... gcc sprawdzanie czy działa kompilator C ... brak konfiguracji: błąd: w /home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log 'po więcej szczegółów t
Lacrymology
powinny one być zdefiniowane podczas „tworzenia”, a nie podczas „konfiguracji”.
long404
właśnie próbowałem skonfigurować emacs 23 z tymi i nie miałem tego problemu: LDFLAGS = "- L / home / me / local / lib" CFLAGS = "- I / home / me / local / include" ./configure sprawdzanie systemu kompilacji type ... x86_64-unknown-linux-gnu sprawdzanie typu systemu hosta ... x86_64-unknown-linux-gnu sprawdzanie pod kątem gcc ... gcc sprawdzanie domyślnej nazwy pliku wyjściowego kompilatora C ... a.out sprawdzanie, czy C kompilator działa ... tak sprawdzanie, czy kompilujemy krzyżowo ... nie sprawdzanie sufiksu plików wykonywalnych ... sprawdzanie sufiksu plików obiektowych ... o sprawdzanie, czy używamy kompilatora GNU C ... tak
long404
8

Zajęło to trochę czasu, zanim było dobrze. Miałem ten problem podczas kompilacji krzyżowej w Ubuntu dla celu ARM. Rozwiązałem to za pomocą:

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

Zauważ, że CFLAGS nie jest używany z autogen.sh/configure, użycie go spowodowało błąd: "configure: błąd: kompilator C nie może tworzyć plików wykonywalnych". W środowisku budowania użyłem skryptu autogen.sh, jeśli nie masz substytutu skryptu autogen.sh ./autogen.sh z ./configure w powyższym poleceniu. Uruchomiłem config.guess w systemie docelowym, aby uzyskać parametr --host.

Po pomyślnym uruchomieniu autogen.sh/configure, skompiluj z:

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

Wybrane przeze mnie CFLAGS to: "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s". Prawidłowe skonfigurowanie wszystkich katalogów plików nagłówkowych zajmie trochę czasu: możesz chcieć, aby niektóre z nich wskazywały na Twój cross-kompilator, a inne na pliki głównego systemu plików i prawdopodobnie wystąpią pewne konflikty.

Jestem pewien, że to nie jest doskonała odpowiedź. I nadal widzę, że niektóre zawierają katalogi wskazujące / a nie / ccrootfs w plikach Makefiles. Chciałbym wiedzieć, jak to naprawić. Mam nadzieję, że to komuś pomoże.

Samuel
źródło