Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #89, МАЙ 2006 г.

Ловушки для капризных программ

Крис Касперски

Хакер, номер #089, стр. 089-106-5


В частности, заставить Bochs поддерживать x86-64 вместе с интегрированным отладчиком можно так:

$ ./configure --enable-x86-64 --enable-debugger

А что делать, если в документации никакого упоминания о сборочных опциях вообще нет (или нас терзают смутные сомнения, что это описание неполное)? Тогда открываем configure в своем любимом текстовом редакторе и смотрим опции "прямым текстом". Если нам повезет, то рядом с ними будут и комментарии. Как вариант, можно набрать "./configure --help" — авось что-то мяукнет в ответ.

Некоторые программы (например, hex-редактор biew) вообще не имеют configure-файла. Это значит, что настраивать программу придется вручную путем редактирования makefile. Звучит намного сложнее, чем выглядит. Структура makefile довольно проста и фактически представляет собой последовательность команд и переменных. Вот переменными-то мы и будем управлять! Перечень возможных значений обычно содержится тут же, в комментариях.

Фрагмент make-файла с различными опциями

TARGET_PLATFORM=i686

TARGET_OS=unix

HOST_CFLAGS=-DHAVE_SSE

Нужно заранее подготовить себя к тому, что часть переменных окажется привязанной к окружению автора (будет содержать абсолютные пути к целевым каталогам, подключаемым файлам, библиотекам или т.д.) или же вовсе окажется не инициализирована, и в этом случае мы будем должны задать их самостоятельно. Некоторые make-файлы управляются через переменные окружения, которые опять-таки нам необходимо задать перед компиляцией, например:

PDCURSES_HOME =$(PDCURSES_SRCDIR)

И вот торжественный момент! Все опции настроены, и мы с замиранием сердца пишем "make". Процесс сборки начался! Стоит отметить, что довольно часто компиляция прерывается с сообщением об ошибке. Что делать? Главное — не паниковать, а прочитать "ругательное" сообщение, перевести его на русский язык и проанализировать. Чаще всего программе не хватает какой-нибудь библиотеки или заголовочного файла. Вообще-то, это должен был выявить конфигуратор (если только он есть), но скачать недостающие компоненты при наличии Интернета — не проблема. Знать бы только, что именно надо скачать! К сожалению, далеко не всегда makefile сообщает "официальное" название библиотеки. Чаще всего нам просто говорят: "Отсутствует файл super-puper-zip.h". Не беда! Запускаем поисковик, вводим имя файла и смотрим, какому пакету он принадлежит и откуда его можно download'ить. Также неплохо сходить на форум поддержки или просто "закинуть" сообщение об ошибке в google. Ведь не одни же мы с ней столкнулись! А раз так, то этот вопрос должен обсуждаться на различных форумах, которые наверняка предоставят нам ответ. Если это не поможет — читаем документацию еще раз, обращая внимание на то, какие библиотеки и системные компоненты должны быть установлены, или пробуем поиграть с опциями сборки, отключая все, что только можно отключить.

Хуже, когда сталкиваешься с грубыми ошибками самих разработчиков. Ведь make-файлы тоже люди пишут и далеко не на всех платформах их тестируют. Если так — попробуй связаться с разработчиками или собери программу другим компилятором (другой версией компилятора).

Назад на стр. 089-106-4  Содержание  Вперед на стр. 089-106-6