Как добавить include и lib пути для настройки/создания цикла?

Мне нужно место для установки библиотек в ящике linux. У меня нет доступа к нему. Я использую ~/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, но он не работает.

Ответ 1

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

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

Всякий раз, когда вы вызываете созданный autoconf configure script с --prefix = $HOME/local, файл config.site будет считан, и все назначения будут сделаны для вас. CPPFLAGS и LDFLAGS должны быть все, что вам нужно, но вы можете делать любые другие желаемые задания (следовательно,... в примере выше). Обратите внимание: флаги -I принадлежат CPPFLAGS, а не CFLAGS, поскольку -I предназначен для предварительного процессора, а не для компилятора.

Ответ 2

Установите 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

Ответ 3

Это заняло некоторое время, чтобы поправиться. У меня была эта проблема при кросс-компиляции в 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 script, если у вас нет опции autogen.sh script./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 в Make файлах. Хотелось бы узнать, как исправить это. Надеюсь, это поможет кому-то.