четверг, 6 января 2011 г.

Компиляция и линковка c g++

Для того что бы создать исполняемый файл необходимо выполнить ряд действий:
1. Скомпелировать исходные в файлы в (промежуточный) объектный тип расширением .o
2. Из обьектных файлов путем их компановки между собой и со стандартной библиотакой C++ получить исполняемый файл.



1. На первом шаге исходные файлы с раширением .cpp (такие как основной файл main.cpp, файлы элемент-функций классов function.cpp), при помощи заголовочных  файлов классов таких как  function.h (расширение .o) компилируються в обьектные (промежуточные) файлы.



ключ -c (компилирование) - создание обьектоного файла;
ключ -o (линковка) - создание исполняемого файла.



vitaliy@fox:~/$ g++ -Wall -c "main.cpp"
vitaliy@fox:~/$ g++ -Wall -c "function.cpp"
vitaliy@fox:~/$ ls -l

итого 48
-rw-r--r-- 1 vitaliy vitaliy  829 Янв  6 23:06    main.o
-rw-r--r-- 1 vitaliy vitaliy 3824 Янв  6 23:14   function.o
...


2. На втором этапе компановщик компанует(линкует) обьектные файлы между собой, а также со стандартной библиотекой C++. (Все файлы находяться в одной папке).
Следующая команда с ключом -o создаст исполняемый файл programma:


vitaliy@fox:~/$ g++ -Wall  main.o function.o -o programma 

vitaliy@fox:~/$ ls -l
итого 48
-rwxr-xr-x 1 vitaliy vitaliy 9753 Янв  6 23:32 programma
...

Выше  компановщик g++ линкует  файлы  main.o object.o между собой, и с бибилотекой C++.


__________________________________________________________________________________

Также возможно сразу создать исполняемую программу programma, непосредственно из исходных файлов .cpp. В этом случае обязательно нужно что бы заголовочные файлы классов .h
находились в одной папке с исходными файлами.

vitaliy@fox:~/$ g++ -Wall main.cpp object.cpp -o programma

vitaliy@fox:~/$ ls -l
итого 48
-rwxr-xr-x 1 vitaliy vitaliy 9753 Янв  6 23:32 programma
...
Выше утилита g++ одной командой создает обьектные файлы, и сразу же из них исполняемый файл, всё в одной строке.



-Wextra //ключ  с дополнительной информацией о предупреждениях

1 комментарий: