Prefix linux ��� ���

Не забывайте про префикс ./ в Linux

16.04.2018

Недавно я совершил глупейшую ошибку, работая в Linux. Я написал небольшую программу, скомпилировал ее и отчаянно пытался запустить через терминал. Исполняемый файл назывался «main». В терминале я зашел в каталог с этим файлом и наивно набрал команду:

Какого же было мое удивление, когда в ответ я получил сообщение о том, что «Команда ‘main’ не найдена…». Как так? Я все проверил еще раз: в терминале мы находились в нужном каталоге, нужный файл там есть, наименование правильное. Но почему тогда Linux его не «видит»?

Я, как водится в таких случаях, полез в Интернет и быстро понял свою ошибку. Дело в том, что Linux мыслит иначе, чем Windows. Я привык к тому, что операционная система всегда заглядывает в текущий каталог в поиске нужного файла. Но Linux при поиске исполняемых файлов ведет себя иначе. Он обращается к переменной окружения PATH. В ней перечислены каталоги, в которых Linux ищет файл, к которому вы обращаетесь. Для того, чтобы просмотреть значение этой переменной наберите в терминале:

Каталоги разделяются двоеточием (на вашей системе может быть другой разделитель). Порядок каталогов соответствует тому порядку, в котором Linux их просматривает. Найдя файл с указанным именем, он запускает его и в другие каталоги даже не заглядывает. Если ни в одном из этих каталогов файл не найден, то выдается сообщение об ошибке. При этом текущий каталог не просматривается.

Для того чтобы изменить такое поведение нужно использовать префикс «./». То есть запуск моей программы должен выглядеть так:

Теперь программа нормально запускается. Учтите что при использовании префикса «./» Linux просматривает только текущий каталог. В каталоги, указанные в переменной PATH, он даже не заглядывает.

Источник

Что делает —prefix именно тогда, когда используется в ./configure?

Итак, у меня был простой вопрос, который, вероятно, заставит меня выглядеть глупым, но я учусь

Что делает префикс? Это просто установка пакета в это место

И может ли ответ дать более сложный ответ для сложной установки и подробно объяснить префиксы и опции, которые идут с ним.

Если бы я запускал apt-get install, как бы я установить его в определенное место с префиксом

Если префикс вызывается в ./configure, почему он всегда делается в этих двух примерах?

2 ответа

Когда вы устанавливаете программное обеспечение с помощью make install или sudo make install , разные файлы размещаются в разных каталогах. Исполняемые файлы, предоставляющие команды, которые пользователь должен выполнять, обычно помещаются в каталог bin , библиотеки обычно находятся в lib , страницы справочника обычно находятся в каталоге man и т. Д. .

Когда вы запускаете ./configure , —prefix позволяет указать, где находятся эти каталоги . Он называется —prefix , поскольку позволяет указать префикс , который появляется в путях к каждому из каталогов, где файлы из создаваемой вами программы или библиотеки должны быть установлены. Большинство сценариев configure поддерживают —prefix и пропускают он и просто запуск ./configure обычно эквивалентны ./configure —prefix=/usr/local .

Чтобы ответить на этот вопрос более полно, я воспроизвел два раздела из моего ответа на Как установить tar-файл «глобально»? (на Unix & Linux ), которые конкретно касаются этого вопроса:

Настройка вашей сборки

Если у вас есть исходный код, скомпилированный с помощью команды ./configure и make , вы обычно будете использовать make install (или sudo make install ) установить его. Это копирует файлы из каталога сборки в место установки. Когда вещь, которую вы устанавливаете, обеспечивает исполняемые команды, эти исполняемые файлы обычно копируются в каталог, который находится в $PATH или который вы должны добавить в $PATH

Хотя сборка и установка программного обеспечения часто так просты, как выполняется ./configure , make , иногда make check или make test , а затем make install или sudo make install иногда хотите передать параметры в скрипт configure для настройки сборки. В частности, , как говорит pfnuesel , это то, как вы настраиваете где программное обеспечение будет установлено. Хотя шаг make install фактически устанавливает программное обеспечение, места, где все будет установлено, как правило, устанавливаются в ./configure step.

Читайте также:  Ноут начал тормозить что делать windows 10

Наиболее распространенным вариантом для этого является —prefix . Префикс по умолчанию, когда вы не говорите configure , что использовать, обычно это /usr/local . (Иногда исходный код программы или библиотеки по умолчанию другой префикс. К счастью, это редко.)

Итак, ./configure обычно эквивалентно ./configure —prefix=/usr/local . Чтобы установить программное обеспечение в своем домашнем каталоге, вы можете использовать ./configure —prefix=/home/galahad (если /home/galahad есть Ваш домашний каталог) или —prefix=»$HOME» . Тогда, конечно, вы должны по-прежнему собирайте и устанавливайте программное обеспечение с помощью make . Я должен сказать, что не все программное обеспечение, которое распространяется в форме исходного кода, построено так путь. Вы всегда должны искать документацию внутри извлеченного архив исходного кода.

Что —prefix означает

Когда вы запускаете ./configure —prefix=directory , вы указывая, что программное обеспечение должно быть установлено под directory . Но это редко, если вообще когда-либо, помещает свободные файлы в directory .Вместо этого он размещает файлы, которые обслуживают разные цели в разных подкаталогах directory . Если те подкаталоги не существуют, он создает их.

Исполняемые файлы обычно идут в directory/bin , хотя они может идти в directory/sbin , если они обычно используются для системное администрирование или они могут пойти (реже в наши дни) в directory/games , если это игры. Библиотеки идут в directory/lib или другой каталог с аналогичным именем, например directory/lib32 . Заголовочные файлы входят в directory/include . Страницы руководства входят в directory/man . Файлы данных, используемые программным обеспечением, входят в directory/share

Вот что значит directory быть префиксом . Это родительский каталог, в котором находятся различные файлы будет установлен. Таким образом, он отображается в виде префикса в абсолютном пути большинства файлов и каталогов, созданных с помощью команды make install или sudo make install .

Есть некоторые исключения из этого. Общесистемная конфигурация файлы — которые иногда создаются при установке программного обеспечения, которое будет использовать их, хотя и не всегда — обычно заходите в /etc . Это не обычно зависит от указания другого префикса. Даже если ты установите много программного обеспечения в /usr/local , оно по-прежнему будет в основном использовать /etc , и ваш каталог /usr/local/etc , вероятно, будет быть несуществующий, пустой или содержит очень мало файлов.

Во многих системах вы можете найти больше информации о типичных расположение файловой системы, запустив man hier . Если вы используете GNU /Linux система, которая может вас заинтересовать в иерархии файловой системы Стандарт .

Здесь указывается, что нужно для настройки текущего пакета или программного обеспечения.

Как и в простом случае, он может определить местоположение библиотек ssl:

и также сообщает, какие пакеты не нужно настраивать, чтобы сделать подходящие компиляции программы в соответствии с вашей системой:

Это всего лишь дополнительные опции, чтобы сделать компиляцию подходящей для вашей системы. Это то, что я думаю. Поправьте меня, если это что-то еще.

Опция —prefix=PREFIX устанавливает независимые от архитектуры файлы в PREFIX . Когда вы запускаете команду make install , библиотеки помещаются в PREFIX/lib , исполняемые файлы в каталоге PREFIX/bin и т. д.

Если этот аргумент не передан команде configure , то значением по умолчанию будет /usr/local

Источник

Prefix linux ��� ���

Система сборки Gwyddion на Unix основана на GNU autotools (autoconf, automake, libtool), так же, как и большинство современного свободного программного обеспечения и программ с открытым исходным кодом под Unix. Если вы когда-либо собирали программы из исходников, вы, вероятно, уже встречались с autotools и знаете, что делать дальше. Этот раздел, тем не менее, будет описывать процесс сборки достаточно детально, чтобы быть понятным и тем, кто ещё этого не делал. Файл INSTALL в каталоге верхнего уровня архива с исходным кодом содержит общие инструкции по установке с помощью GNU autotools.

Читайте также:  Как лучше линукс для сервера

Краткие инструкции

Если вам уже знакома последовательность действий:

tar -jxvf gwyddion-2.49.tar.xz
cd gwyddion-2.49
./configure
make
make install

Распаковка исходного кода

Распакуйте архив с исходным кодом командой

tar -Jxvf gwyddion-2.49.tar.xz

заменяя 2.49 текущим номером версии. При этом будет создан каталог gwyddion-2.49 (снова с текущим номером версии вместо 2.49), перейдите с помощью cd в этот каталог. Все остальные действия по сборке будут проходить там.

Если в операционной системе отсутствует xz, можно загрузить gwyddion-2.49.tar.gz (сжатый с помощью gzip) вместо предыдущего архива и распаковать его с помощью

tar -zxvf gwyddion-2.49.tar.gz

Однако, современные Unix и подобные им системы поддерживают и gzip, и xz, и заметно меньший gwyddion-2.49.tar.xz обычно будет более удачным вариантом.

Настройка

чтобы сконфигурировать сборку Gwyddion .

Скрипт оболочки configure пытается угадать правильные значения для различных переменных, меняющихся от системы к системе и используемых в процессе компиляции. Он использует эти переменные чтобы создать Makefile в каждом каталоге пакета, набор заголовочных файлов с расширением .h , которые содержат зависящие от системы определения и некоторые другие вспомогательные файлы. В конце своей работы он создаёт другой скрипт оболочки config.status , который можно затем использовать для повторения текущей конфигурации, и файл config.log , который содержит подробности процесса детектирования и который полезно включать в сообщения об ошибках компиляции. В конце команда configure также выводит суммарную сводку о включенных и выключенных дополнительных опциях, включая причины почему опция была выключена.

Если configure пишет об отсутствии требуемых пакетов, установите эти пакеты и перезапустите её. То же самое справедливо и для случая, если configure заканчивается успешно, но вы обнаружили, что забыли установить опциональный компонент, с которым хотели собрать Gwyddion . Возможно, что пакет не был найден или был неправильно определён даже если вы его установили, а именно если он был установлен в нестандартный каталог. В этом случае необходимо настроить определённые переменные окружения чтобы дать configure возможность найти эти пакеты:

Большинство пакетов идут вместе с так называемыми файлами pkg-config ( .pc ), которые описывают как программы должны собираться и линковаться с ними. configure использует информацию из этих файлов, следовательно, PKG_CONFIG_PATH должна быть установлена таким образом, чтобы там были перечислены все нестандартные какталоги с нужными файлами pkg-config. Чтобы добавить, например, установленную библиотеку GTK+ в /opt/gnome и установленную библиотеку FFTW3 в $HOME/opt/fftw3 , нужно выполнить:

PKG_CONFIG_PATH=/opt/gnome/lib/pkgconfig:$HOME/opt/fftw3/lib/pkgconfig
export PKG_CONFIG_PATH

Может потребоваться настроить эти переменные чтобы включить нестандартные каталоги с исполняемыми файлами и библиотеками соответствующих пакетов. Переменные LD_LIBRARY_PATH и DYLD_LIBRARY_PATH обе задают путь поиска для разделяемых библиотек, но первая используется в системах на основе Linux и BSD, в то время, как вторая на OS X.

Может потребоваться настроить эти переменные чтобы включить нестандартные каталоги с заголовочными файлами и библиотеками пакетов, с которыми не шло файлов pkg-config, например, для libTIFF в /usr/local можно установить:

CPPFLAGS=-I/usr/local/include
export CPPFLAGS
LDFLAGS=-L/usr/local/lib
export LDFLAGS

Опция —prefix команды configure задаёт базовый каталог установки. Компоненты программы будут установлены в его подкаталоги bin , lib , share , и т.д. (которые будут созданы если они не существуют). Более детальное управление возможно с помощью опций, задающих отдельные подкаталоги, таких как —bindir , —libdir . Префикс по умолчанию – /usr/local/bin , чтобы установить Gwyddion в домашний каталог пользователя можно использовать, например команду

Если вы устанавливаете Gwyddion для личного использования это является рекомендованным вариантом, поскольку в этом случае не требуется выполнять действий с правами суперпользователя.

Настройки процесса конфигурирования

Необязательные возможности можно включить/выключить с помощью опций вроде —with-foo / —without-foo или —enable-foo / —disable-foo . Например, компиляция с zlib может быть отключена командой:

По умолчанию все опциональные возможности включены, если найдены все требуемые для их реализации библиотеки. Краткая информация о включенных и отключенных опциональных возможностях печатается в выводе команды configure недалеко от его конца.

Полный список опций и важных переменных configure можно получить с помощью команды:

Читайте также:  How to add file in linux

Список будет длинным и большая часть опций контроллирует включение/выключение отдельных опциональных возможностей или передачу необходимых флагов компиляции и связывания для различных библиотек. Например, задавая FFTW3_CFLAGS и FFTW3_LIBS можно задать (или переопределить) как будет осуществляться компиляция и связывание с FFTW3. Однако, такое ручное задание является резервным вариантом для гораздо более удобного метода, основанного на использовании pkg-config в том случае если он почему-то не работает.

Некоторые интересные общие опции описаны в следующих параграфах.

Настройки пользователей

C Gwyddion поставляются различные файлы взаимодействия со средой рабочего стола, которые определяют типы MIME, элементы меню, привязки файлов, генерацию миниатюр и т.п. Если Gwyddion устанавливается в системный каталог, они обычно находятся в правильных местах файловой системы. Однако, если вы устанавливаете его куда-то в свой каталог пользователя, то эти файлы нужно поместить в другое место. а именно в определённые скрытые каталоги, начинающиеся с точки в вашем домашнем каталоге.

Это можно задать с помощью опции —enable-home-installation команды configure . Следует отметить, что использование этой опции приводит к установке файлов в каталоги вне заданного префикса.

Настройки создателей пакетов

Если Gwyddion устанавливается во временный каталог для дальнейшего создания пакета, необходимо отключить определённые действия после установки, которые нужно производить с системой, где пакет будет установлен, а не в момент создания пакета.

Обновление файлов FreeDesktop может быть отключено с помощью —disable-desktop-file-update . Установка схем GConf2 может быть отключена с помощью —disable-schemas-install . Обычно это не надо делать в явной форме т.к. установки в временный каталог используют непустую переменную DESTDIR (см. раздел установка). Если переменная DESTDIR не пустая, система сборки пропустит автоматически действия после установки. Тем не менее, обычной причиной отключения этих действий является то. что Gwyddion устанавливается на временное место вместо финального каталога (что обычно происходит при сборке пакетов в Linux). В этом случае вспомогательные действия отключаются автоматически при непустой переменной DESTDIR (см. раздел установка) и, следовательно, нет нужды отключать их в configure .

Передавая параметр —enable-library-bloat скрипту configure заставляет связываться модулям со всеми библиотеками. Это автоматически включается на MS Windows, где это является обязательным требованием. В основанных на Unix системах, связывание модулей со всеми библиотеками, которые уже загружены основной программой только напрасно замедляет работу (как во время сборки, так и во время исполнения). Таким образом, модули не связываются непосредственно с основными библиотеками вроде GLib. если ваша система или правила сборки требуют связывания модулей со всеми библиотеками (например, в системах, основанных на AltLinux), использование этой опции включает данное поведение.

Передачей опции —disable-module-bundling команде configure можно запретить объединение всех модулей одного типа (файловых, обработки данных, . ) в одну разделяемую библиотеку, что обычно делается для сохранения места на диске и ускорения загрузки. Хотя подобное объединение не меняет функциональность, оно заметно меняет набор устанавливаемых файлов. Если вы, по той или иной причине, полагаетесь на наличие на диске файла gwyfile.so , самое время остановиться и перестать так делать. Тем не менее, можно использовать данную опцию чтобы принудительно получить традиционный вариант установки, где каждый модуль находился в отдельном файле.

Настройки для разработчиков

Если вы собираетесь накладывать патч или иным образом модифицировать исходный код Gwyddion запустите configure с опцией —enable-maintainer-mode чтобы включить различные правила обновления и пересборки, которые не используются при обычной компиляции. В зависимости от вида изменений могут понадобиться некоторые дополнительные инструменты, описанные в разделе Снимок Subversion, разработка.

По умолчанию справочное руководство по C API не пересобирается. Подготовленные файлы HTML распространяются с архивом, документация меняется редко и её генерация требует достаточно продолжительного времени. Для того, чтобы включить генерацию документации по API нужно передать опцию —enable-gtk-doc скрипту configure . Естественно, вам потребуется gtk-doc. Следует отметить, что configure предупредит вас, если вы включили режим мантейнера, но выключили gtk-doc (что может быть полезно для того, чтобы не пересобирать постоянно и бесцельно документацию). Если вы не собираетесь делать make dist , это предупреждение безвредно.

Источник

Оцените статью