Почему некоторые символы не обнаруживаются в библиотеке при запуске ./configure? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь установить 8086 эмулятор из исходников. Я запускаю ./configure и вижу следующие предупреждения в выводе:

checking for g_signal_emit in -lgtk-x11-2.0... no
configure: WARNING: Without GTK there will be no GTK-GUI of i8086emu!
checking for XkbGetMap in -lgdk-x11-2.0... no
configure: WARNING: Without GTK there will be no GTK-GUI of i8086emu!
checking for g_malloc in -latk-1.0... no
configure: WARNING: Without ATK there will be no GTK-GUI of i8086emu!
checking for g_log in -lgdk_pixbuf-2.0... no
configure: WARNING: Without GTK there will be no GTK-GUI of i8086emu!

Что может быть причиной? Означает ли это, что у меня неправильная версия библиотеки? Или, может быть, библиотека должна быть перекомпилирована с другой конфигурацией? Что мне делать, если я столкнулся с такой проблемой?

UPD: Символ g_signal_emit принадлежит не -lgtk-x11-2.0, а -lgobject-2.0. Если я бегу:

env LIBS='-lgobject-2.0' ./configure

тогда у меня

checking for g_signal_emit in -lgtk-x11-2.0... yes

Ситуация становится еще более запутанной.

1 Ответ

0 голосов
/ 01 ноября 2018

Что может быть причиной?

Фактические предупреждающие сообщения, предоставляемые разработчиком проекта, более понятны, чем сообщения «проверки ...», которые являются стандартными сообщениями Autoconf, объясняющими, что он делает, а не целью его выполнения.

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

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

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

Значит ли это, что у меня неправильная версия библиотеки? Или, может быть, библиотека должна быть перекомпилирована с другой конфигурацией?

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

Что мне делать, если я столкнулся с такой проблемой?

Начните с вызова и чтения справки по конфигурации:

./configure --help

Многое из этого является стандартным, но в нем могут быть описаны соответствующие опции, которые вы можете передать configure для разрешения ситуации.

Вы также можете найти полезную информацию в проектной документации. Охват и качество варьируются в широких пределах, но обычно в документах сообщается, какая версия сторонних библиотек вам понадобится.

Для получения подробной информации о неудачных проверках вы также можете просмотреть журнал конфигурации.

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

Несколько советов для простых случаев:

  • Сборка библиотеки - это не то же самое, что установка ее. Обычно компоновщик не находит удаленные библиотеки.
  • В системах, которые делают различие, вам нужны пакеты разработки для рассматриваемых библиотек. Пакеты времени выполнения обычно не достаточны в таких системах.
  • Убедитесь, что вы правильно выбрали библиотеку. Иногда я бился головой об стену, пытаясь понять, почему configure, похоже, не видит установленную библиотеку, и я обнаружил, что у меня была неправильная архитектура библиотеки (32-разрядная или 64-разрядная).
  • Некоторые пакеты неправильно устанавливают свои библиотеки вне стандартного пути поиска компоновщика. Клиентные клиенты таких пакетов часто предоставляют способ передать путь к configure через аргументы командной строки, но если нет, вы можете использовать переменную окружения LDFLAGS, , например,

    LDFLAGS="-L/path/to/libfoo.d" ./configure
    
...