Безопасность и оптимизация Linux.Редакция для Red Hat

Компиляция программного обеспечения на вашей системе


Программы – это то, что компьютер может выполнять. Изначально, кто-то написал “исходные коды” на языке программирования который он/она знает (например, C, C++ и т.д.). Исходные коды обрабатываются компилятором, который преобразует инструкции в двоичные коды, подходящие под требуемый процессор (например, 386). Современным форматом исполняемых фалов является elf. Программист передает исходные коды компилятору и получает исполняемые файлы. Часто процесс компиляции завершается ошибкой или полученная программа не работает как надо. Половину времени процесса программирования составляет отслеживание и исправление этих проблем.

Для начинающих имеется много аспектов и новых терминов, относящихся к компиляции, которые вы должны знать. Ниже описаны некоторые из них:

Multiple Files

Программы, состоящие из одного файла встречаются редко. Обычно в него входит несколько файлов (скажем, *.c, *.cpp и т.д.), каждый из которых компилируется в объектные коды, а затем они компонуются в исполняемый файл. Компилятор обычно используется для компоновки и вызывает в заключение программу ld.

Makefiles

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

Библиотеки (Libraries).

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

Патчи (Patches).

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

Ошибки при компиляции и компоновке.

Ошибки при компиляции и компоновке часто возникают из-за недосмотра и неправильного использования языка. Проверьте, что для функций, которые вы вызываете используются правильные заголовочные файлы. Неупомянутые символы (Unreferenced symbols) являются признаком незавершенности шага компоновки. Также проверьте, все ли необходимые библиотеки (GLIBC) и утилиты (GCC, DEV86, AUTOMAKE и т.д.) установлены на вашей системе.

Отладка.

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



Содержание раздела