Як додати шляхи включення та бібліотеки для налаштування / створення циклу?


83

Мені потрібно місце для встановлення бібліотек у вікні Linux, до якої я не маю доступу su. Я використовую ~ / local [/ bin, / lib, / include], але я не знаю, як я можу сказати ./configure шукати там бібліотеки (зокрема, я намагаюся скомпілювати emacs, якому потрібен libgif , який не входить у мій дистрибутив).

Я спробував додати

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

.bashrc, але, здається, це не працює.


4
Зауважте, що за винятком PATH, ви перезаписуєте системні за замовчуванням. Якщо ви зробите щось на зразок export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH, ваш компілятор буде шукати спочатку у ~/local/include, та в $ C_INCLUDE_PATH, лише якщо він не знайшов включення у першому каталозі.
Marc Plano-Lesay

Відповіді:


99

Вам потрібен файл config.site. Спробуйте:

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

Кожного разу, коли ви викликаєте скрипт налаштування, згенерований autoconf, за допомогою --prefix = $ HOME / local, config.site буде прочитано, і всі призначення будуть зроблені для вас. CPPFLAGS і LDFLAGS повинні бути всім необхідним, але ви можете також виконувати будь-які інші бажані завдання (отже, ... у зразку вище). Зверніть увагу, що прапори -I належать CPPFLAGS, а не CFLAGS, оскільки -I призначений для попереднього процесора, а не компілятора.


Вільям; Дякуємо, що вдарили порадою щодо CPPFLAGS для побудови спільного хосту. Заощадили багато обмови з невдалою ./configure запускається сьогодні, завдяки вашій примітці.
Брайан Тіффін

30

Встановіть LDFLAGS і CFLAGS під час запуску make:

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

Якщо ви не хочете робити це мільйони разів, експортуйте їх у свій .bashrc (або еквівалент оболонки). Також встановіть LD_LIBRARY_PATH для включення / home / me / local / lib:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib

коли я додаю LDFLAGS і CFLAGS до .bashrc ./configure не вдається з конфігурацією: помилка: компілятор C не може створювати виконувані файли ...
Lacrymology

Можливо, вони перевизначають параметри компілятора налаштування тестового коду. Просто використовуйте попереднє завантаження make env. Також спробуйте і переконайтеся, що у configure ще немає опції заміни libgif. Якщо сценарії автоінструментів зроблені належним чином, це дозволить вам вказати шлях, де встановлено libgif (наприклад, замінити розташування бібліотеки за замовчуванням). Це було б чистішим рішенням.
long404

така ж різниця .. tneme @ ws16lab07: ~ / Descargas / emacs-23.3 $ LDFLAGS = "- L / home / tneme / local / lib" CFLAGS = "- l / home / tneme / local / include" ./configure --prefix = "/ home / tneme / local" перевірка тип побудови системи ... i686-pc-linux-gnu перевірка типу хост-системи ... i686-pc-linux-gnu перевірка на наявність gcc ... gcc перевірка роботи компілятора C ... немає конфігурації: помилка: у /home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log 'для отримання детальнішої інформації t
Лакримологія

їх слід визначати, коли ви "робите", а не коли "налаштовуєте".
long404

просто спробував налаштувати emacs 23 з ними, і у мене не виникло цієї проблеми: LDFLAGS = "- L / home / me / local / lib" CFLAGS = "- I / home / me / local / include" ./configure перевірка системи побудови тип ... x86_64-unknown-linux-gnu перевірка типу хост-системи ... x86_64-unknown-linux-gnu перевірка на gcc ... gcc перевірка на ім'я вихідного файлу за замовчуванням компілятора C ... a.out перевіряючи, чи компілятор працює ... та перевірити , чи є ми крос компіляцію ... немає перевірка суфікса виконуваних файлів ... перевірка суфіксом об'єктних файлів ... про перевірку чи ми з допомогою компілятора GNU C ... да
long404

8

Це зайняло деякий час, щоб виправитись. У мене виникла ця проблема при перехресній компіляції в Ubuntu для цілі ARM. Я вирішив це за допомогою:

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

Зверніть увагу, що CFLAGS не використовується з autogen.sh/configure, його використання дало мені помилку: "configure: error: C-компілятор не може створювати виконувані файли". У середовищі збірки я використовував сценарій autogen.sh, якщо у вас немає заміни сценарію autogen.sh ./autogen.sh за допомогою ./configure в команді вище. Я запустив config.guess у цільовій системі, щоб отримати параметр --host.

Після успішного запуску autogen.sh/configure скомпілюйте за допомогою:

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

CFLAGS, які я вибрав для використання, були: "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s". Щоб правильно налаштувати всі каталоги включення, знадобиться деякий час: можливо, вам знадобиться, щоб деякі включали вказівку на ваш крос-компілятор, а деякі вказували на вашу кореневу файлову систему, і, ймовірно, будуть деякі конфлікти.

Я впевнений, що це не ідеальна відповідь. І я все ще бачу, як деякі включають каталоги, що вказують на / а не / ccrootfs у файлах Makefiles. Хотілося б знати, як це виправити. Сподіваюся, це комусь допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.