Просмотров: 3801 шт.
Проба пера..
Hello world
*****
Все, как обычно. Заводимс спец. папку, в ней создаем файл:
hello.c
Пишем простейший код:
#include <stdio.h>
int main(void)
{
printf("Hello world!
");
return(0);
}
Сохраняем и выполняем команду:
gcc hello.c
В каталоге появился новый файл - a.out, это название присваивается по умолчанию, если специально не задано другого.
Это и есть исполняемый файл. Запусткаем его (в консоли набираем):
./a.out и радуемся в связи с первой написанной программой в линуксе :)
При запуске исполняемого файла, если мы наберём только название, ось будет искать его в каталогах /usr/bin и /usr/local/bin, и, естественно, не найдёт. Первый из них предназначен для размещения стабильных версий программ, как правило,входящих в дистрибутив Linux. Второй – для программ, устанавливаемых самим пользователем (за стабильность которых никто не ручается). По умолчанию при сборке программы устанавливаются в каталог /usr/local/bin.
флаг -o используем чтобы указать определенное имя получаемому исполняемому файлу:
gcc hello.c -o say_hello
флаг -E используем чтобы посмотреть, что получается после работы препроцессора. Этот флаг останавливает выполнение программы как раз на этапе обработки препроцессором. В результате получается файл исходного кода с включённым в него содержимым заголовочных файлов.
выподняем/смотрим:
gcc -E hello.c -o hello.cpp
флаг -с используем для создания объектных файлов (виндовый obj):
gcc -c kalkul.c
Название получаемого файла такое же, но компилятор изменяет расширение .c на .o (но указать можно и вручную).
флаг -x используем, если создаётся объектный файл из исходника, уже обработанного препроцессором (например, такого, какой мы получили выше), мы должны
обязательно указать явно, что компилируемый файл является файлом исходного кода, обработанный препроцессором, и имеющий теги препроцессора. В противном случае он будет обрабатываться, как обычный файл C++, без учёта тегов препроцессора, а значит связь с объявленными функциями не будет устанавливаться.
Файл C++, обработанный препроцессором обозначается cpp-output:
gcc -x cpp-output -c hello.cpp
Ну и собираем "проект":
gcc hello.o -o say_hello
Запускаем:
./say_hello
P.S. Зачем вся эта возня с промежуточными этапами?
Программы редко состоят из одного файла. Как правило исходных файлов несколько, и они объединены в проект. И в некоторых исключительных случаях программу приходится компоновать из нескольких частей, написанных, возможно, на разных языка. В этом случае приходится запускать компиляторы разных языков, чтобы каждый получил объектный файл из своего исходника, а затем уже эти полученные объектные файлы компоновать в исполняемую программу.
Это ж блин не в студии тыцнуть одну кнопку и весть проект собрался о_О.