Что же у нас есть для кросс-компиляции? Если не считать коммерческих продуктов и мелких поделок, то для того, чтобы скомпилировать любой проект под любую платформу, понадобится Gnu Compiler Collection, или, кратко, GCC. GCC — это один большой набор исходников, но собирать из него кросс-компилятор на каждую новую целевую платформу придётся отдельно.
Надо сказать, список целевых платформ довольно внушителен.
Вообще, для того, чтобы работать с GGC надо собрать т. н. Toolchain, набор утилит для компиляции. В toolchain входит помимно GCC, ещё Binutils, предназначенные для манипуляций с объектными и бинарными файлами. Для голого железа (если планируется работать не под ОС на целевой платформы, весьма полезной будет также NewLib — сборник стандартных процедур.
Binutils
В Binutils входят:
Утилита определения места в исходнике по адресу.
Утилита работы с объектными архивами.
Дешифратор имён перегруженных функций и методов для языков C++ и Java.
Генератор файлов для сборки и использования DLL.
Профилировщик.
Библиотекарь — утилита для работы с динамическими и статическими библиотеками.
Язык Си: установка MinGW и «Hello World» (компилятор gcc)
Конвертер объектных файлов в NLM.
Генератор списка символов.
Копировщик и преобразователь объектных файлов.
Утилита вывода информации по объектным файлам.
Утилита индексирования объектных архивов.
Утилита вывода информации по ELF-файлам.
Измеритель размера секций и программ в целом.
Извлекатель символьных строк из объектных файлов.
Утилита для отфильтровывания символических имён, отладочной информации из бинарных файлов.
Компилятор файлов сообщений для Windows.
Компилятор ресурсов Windows.
GCC
В составе GCC большой набор разнообразных инструментов, однако, скорее всего иметь дело придётся с frontend, который так и называется, gcc. Он сам определяет тип исходного файла и вызывает соответствующий компилятор, а также, по необходимости, линковщик или библиотекарь.
NewLib
NewLib — специальная подборка стандартных функций для встраиваемых систем. Она включает в себя libc (функци работы со строками, файлами и т. д.), libm (разнообразные математические функции). Также она обладает широкими возможностями конфигурирования под разнообразные требования.
Надо сказать, NewLib далеко не единственный выбор. В принципе, если не пользоваться библиотечными функциями, можно вообще без библиотек обойтись, но этот путь сложен и тернист — стандарт си не требует наличия их в т. н. standalone environment 1) . Вполне возможно, есть другие подходящие варианты
GDB
GNU Debugger — стандартное средство отладки программ, и, в принципе, необязательно. Возможно, вы предпочтёте графический отладчик или вовсе пользуетесь исключительно printf-style-debug 2) .
Сборка Toolchain
Также стоит определить путь, куда будет всё установлено. В терминах GCC это называется prefix. По умолчанию этот путь — /usr/local . Однако по ряду различных причин иногда стоит специально указать другой. Первая причина — поставить в собственную домашнюю директорию, например, если нет root-полномочий на машине или просто его поставить только для себя (впрочем, лучше так не делать).
Компиляция кода на Си с помощью gcc на Linux Mint 20
Другая причина — бывает нужда с специальных вариантах сборки, и тогда это стоит делать, чтобы не спутать такую сборку с обычной. Стоит отметить, что компиляторы под различные платформы не перепутываются, так как имеют различные имена: gcc для ARM, например, будет именоваться arm-elf-gcc 3) или arm-linux-gcc , и именно его придётся указывать при компиляции (либо указывать target, тогда gcc сам вызовет нужный). Если же оставить путь по-умолчанию, сборка попадёт в стандартный путь поиска исполняемых файлов — /usr/local/bin , и может вызываться без специального указания пути или модификации $path .
Для указания prefix у configure есть соответствующая опция: — -prefix=…
Порядок сборки Toolchain
Сборка тулчейна в описанной конфигурации состоит из следующих этапов:
Источник: vovanium.ru
3. Краткие теоретические сведения
Программа на языке С — это один или несколько текстовых файлов, которые называются исходными. Чтобы запустить программу, ее исходные файлы необходимо скомпилировать, т.е. создать исполняемый файл, содержащий в себе инструкции процессора и пригодный для запуска на компьютере.
При выполнении лабораторных работ мы будем использовать компилятор GNU Compiler Collection (GCC).
GCC — основной компилятор проекта GNU. Он поддерживает набор всех наиболее используемых языков программирования и обеспечивает перенос программ на десятки аппаратных платформ. Все свободно распространяемое программное обеспечение, включая и компиляторы, на том или ином уровне основывается на GCC.
Для того чтобы GCC нормально работал, необходимо, чтобы исходные файлы, содержащие текст программы, имели имена, заканчивающиеся на .c.
В простейшем случае откомпилировать программу можно, запуская компилятор командой
Если программа была написана без ошибок, то компилятор создаст исполняемый файл с именем a.out. Изменить имя создаваемого исполняемого файла можно, задав его с помощью опции -o:
gcc имя_исходного_файла -o имя_исполняемого_файла
Например, если программа состоит из одного исходного файла hello.c, то для его компиляции компилятором GNU С достаточно выполнить команду:
$ gcc hello.c -o hello
В результате получится файл hello, имя которого указано в опции -o. Этот файл является исполняемым и его можно запускать при помощи команды:
Пара символов ./ перед hello означает «искать исполняемый файл hello в текущей директории».
Компилятор gcc имеет несколько сотен возможных опций. Подробную информацию об опциях компилятора gcc можно получить, если набрать
Чтобы создать исполняемый под Linux файл программы, Вам предварительно необходимо скопировать файл с текстом программы в папку /home/user. Вы имеете право запускать на исполнение файлы, расположенные в этой папке. Для передачи данных между основным компьютером и виртуальной машиной воспользуйтесь общей папкой share * .
Для редактирования текста программы можно воспользоваться, например, текстовым редактором gedit или встроенным редактором файлового менеджера Midnight Commander (mc).
Чтобы открыть текст с помощью gedit можно, например, набрать в командной строке
Можно открыть в «Обозревателе файлов» Nautilus рабочую папку (например, дважды щелкнув по иконке «Домашняя папка пользователя user») и двойным щелчком открыть файл с текстом программы. Если файл имеет расширение .с, в gedit будет автоматически включена подсветка синтаксиса. В противном случае нужно выбрать пункт меню «Вид»-> «Режим подсветки синтаксиса»-> «Исходные тексты»-> «С».
Чтобы запустить файловый менеджер Midnight Commander наберите в командной строке
Далее выберите текстовый файл для редактирования и нажмите F4.
3.2. Анализ параметров вызывающей командной строки
Если исполняемый файл, полученный в результате компиляции и компоновки программы, написанной на языке С, вызывается на выполнение вводом с терминала его имени, то параметры этой командной строки могут быть переданы указанной программе в качестве аргументов функции main():
int main(int argc, char *argv[])
При этом значение переменной argc равно числу параметров введенной командной строки, а аргумент argv представляет собой массив указателей на строки, являющиеся параметрами введенной командной строки []. Первая строка – argv[0] – это имя программы. Строка argv[i], i=1,…, argc-1 представляет собой i-й аргумент программы.
Следующая небольшая программа выводит параметры командной строки, с помощью которой она была вызвана на выполнение. Фактически, эта программа представляет собой простейшую версию команды ОС Linux echo.
int main(int argc, char *argv[])
В соответствии с принятыми в ОС Linux соглашениями параметры командной строки, начинающиеся с символа “-“ , являются флагами вызываемой на выполнение команды. Если следовать этим правилам при разработке программ, то, очевидно, разрабатываемые программы должны осуществлять разбор командной строки с целью распознавания флагов и аргументов команды.
Источник: studfile.net
Команда GCC в Linux — Параметры GCC в среде Linux
В этой статье мы увидим план GCC Command в Linux, GCC сокращенно называется GNU Complier Collection. GCC может компилировать C, C ++, Ada и многие другие языки программирования, которые понятны системе. Поскольку Linux является открытой и бесплатной ОС, она стала очень популярной среди всех программистов. Поэтому для компиляции языков программирования в Linux используется GCC. GCC может помочь нам писать и выполнять язык C в Linux более продвинутым способом.
Чтобы проверить версию компилятора gcc в вашей системе по умолчанию, вы можете использовать команду as –version в командной строке Linux.
Основной синтаксис GCC
gcc (options) (source_file) (object_files) (-o output_file)
Давайте возьмем простую C-программу и запустим ее в Linux с помощью Linux.
Чтобы выполнить программу на C, нам нужно выполнить три шага. Они есть:
- Напишите: C Программа, которую вы хотите скомпилировать в среде Linux.
- Компилировать: программа для проверки, существует ли какая-либо ошибка или нет.
- Выполнить: Программа для просмотра результатов в среде Linux.
Вышеуказанные шаги разработаны с примерами и синтаксисом ниже:
Параметры GCC в среде Linux
Вот несколько вариантов, которые можно использовать при компиляции разных языков программирования в Linux. Мы также явно использовали эти опции ниже, чтобы скомпилировать C-программу ниже.
Параметры | Описание |
Gcc –c | Компилирует исходные файлы в объектные файлы без ссылки на любые другие объектные файлы. |
gcc –Idir | Включает каталоги заголовочных файлов |
gcc –llib | связать код с файлами библиотеки |
gcc -o выходной файл | Построить вывод, сгенерированный в выходной файл |
gcc –w | Отключает все предупреждающие сообщения во время компиляции. |
gcc –wall | включает все предупреждающие сообщения во время компиляции |
gcc –Wextra | Включает дополнительные предупреждающие сообщения во время компиляции. |
Шаг 1: написать программу на C
Создайте программу на C для печати «Hello World» в Linux, выполнив следующие шаги. Убедитесь, что вы сохранили программу на C с расширением .c. Ниже приведены шаги для создания файла .c и записи в него кода. Сохраните, прежде чем закрыть файл.
- коснитесь main.c
- vi main.c
- напишите следующий код:
#include
int main(void)
(
printf(«n Hello World n»);
return 0;
)
- сохранить код в Linux
Шаг 2: Скомпилируйте программу C
Теперь ниже приведены варианты компиляции простой программы на C с использованием GCC в Linux. Вы можете использовать параметры в соответствии с вашими требованиями и построить свою программу, чтобы получить желаемый результат.
1. Основной синтаксис для компиляции кода C: Для компиляции кода C используйте следующий синтаксис. Этот синтаксис используется без каких-либо опций.
Синтаксис : gcc main.c
Когда вы скомпилируете приведенный выше код, вы получите вывод с именем файла a.out. Вывод по умолчанию после компиляции программы на C приведен в формате «a.exe» или «a.out».
2. Мы также можем явно указать имя выходного файла, используя опцию –o.
Синтаксис : gcc main.c –o output
3. Чтобы увидеть предупреждения во время компиляции C-программы: нам нужно использовать опцию –wall при компиляции C-программы, как показано ниже:
Пример :
#include
int main(void)
(
printf(«n Hello World (%d)n», i);
return 0;
)
Синтаксис : gcc –wall main.c –o output
Как только мы установим опцию –wall, мы увидим предупреждения, которые могут появиться в нашем коде. Здесь наш код выдаст неинициализированное предупреждение для переменной «i».
4. Чтобы получить предварительно обработанный вывод с параметром –E: вывод будет производиться на стандартный вывод для перенаправления нашего результата в другой файл. Здесь output.i будет содержать предварительно обработанный результат.
Синтаксис : gcc –E main.c > output.i
5. Чтобы получить промежуточные файлы, используя –save-temps: мы можем хранить все промежуточные файлы, которые генерируются во время компиляции, в том же каталоге, откуда мы выполняем компиляцию.
Синтаксис : gcc –save-temps main.c
Пример : gcc –save-temps main.c
Выход : лс
a.out main.c main.i main.o main.s
Здесь мы также видим промежуточные и исполняемые файлы.
6. Чтобы увидеть ошибку при компиляции C-программы : Чтобы увидеть ошибку при компиляции C-программы, мы можем использовать опцию –W. Это один из лучших способов избежать ошибок.
Синтаксис : gcc main.c –Werror –o output
7. Отладка C-программы в Linux: Отладка C-программы в Linux во время компиляции может быть выполнена с помощью –ggdb.
Синтаксис : gcc –ggdb main.c –wall –o output
8. Подробный вариант — увидеть полное описание, используемое в Linux во время компиляции. Команда -v используется как показано ниже:
Синтаксис: gcc –v main.c –o output
Шаг 3: Запустите программу C
Последний шаг — запустить программу на C в ОС Linux, используя следующий синтаксис:
Синтаксис : ./program_name
В нашем примере мы можем запустить нашу программу, используя следующий синтаксис:
Синтаксис : ./output
Вывод : Hello World
Вывод — команда GCC в Linux
Здесь, в этой статье, мы узнали о том, как написать C-программу в Linux, скомпилировать C-программу и запустить c-программу. GCC очень прост в использовании и дал нам много возможностей для упрощения или запуска C-программы в ОС Linux. Убедитесь, что все пакеты установлены в Linux, а затем вы можете запускать C, C ++, Ada и многие другие языки в Linux.
Рекомендуемые статьи
Это было руководство к GCC Command в Linux. Здесь мы также обсудим введение в GCC Command в Linux, синтаксис и опцию GCC в Linux Environment. Вы также можете взглянуть на следующие статьи, чтобы узнать больше —
- Лучший компилятор C ++
- Лучшие компиляторы Си
- Функции QlikView
- Что такое язык ассемблера?
Источник: ru.education-wiki.com