Как добавить пути include и lib для настройки / создания цикла? - PullRequest
68 голосов
/ 27 сентября 2011

Мне нужно место для установки библиотек в 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, но, похоже, не работает.

Ответы [ 3 ]

91 голосов
/ 01 октября 2011

Вы хотите файл config.site. Попробуйте:

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

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

27 голосов
/ 27 сентября 2011

Устанавливайте 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
8 голосов
/ 24 мая 2013

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

...