Компиляция (Многомодульные программы)

Модератор: Модераторы разделов

Аватара пользователя
Ballantre
Сообщения: 114
ОС: Linux

Компиляция

Сообщение Ballantre »

Помогите начинающему Linux-программеру, пожалуйста!
Каким образом производится компиляция многомодульных программ из командной строки? Язык - С++.
Я двадцать лет знал его и всегда ненавидел, и всегда восхищался, и всегда по-рабски боялся его.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Компиляция

Сообщение Zeus »

Из командной строки: по частям.
Каждый модуль компилируешь с опцией "только компиляция (без линковки)". У g++ это флаг -с
Когда все модули скомпилированы в объектные файлы (*.o), проект можно собирать в исполняемый файл (или библиотеку - смотря что компилишь).

Но лучше прописать всё это в makefile - так удобнее.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Компиляция

Сообщение serzh-z »

Помогаем начинающему программеру вообще: :)
g++ -c *.cpp
g++ -o mybin *.o
Спасибо сказали:
Аватара пользователя
Ballantre
Сообщения: 114
ОС: Linux

Re: Компиляция

Сообщение Ballantre »

Спасибо, товарищи, что так быстро откликнулись! Дело в том, что совсем недавно перешел на нормальную ОСь с проклятого мастдая. Поэтому в линковке, честно говоря, не ахти.
Мой основной вопрос в следующем: пусть у нас есть n заголовочных файлов и, например, n+1 cpp-файлов. Тогда мы создаем объектные файлы для каждого cpp, а потом все эти объектные одной строкой в исполняемый, или как?
Я двадцать лет знал его и всегда ненавидел, и всегда восхищался, и всегда по-рабски боялся его.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Компиляция

Сообщение serzh-z »

Ballantre писал(а):
09.10.2006 22:57
совсем недавно перешел на нормальную ОСь с проклятого мастдая
Чтобы не делать поспешных выводов - для начала рекомендуется к прочтению это http://linuxforum.ru/index.php?showtopic=26542 :)

Ballantre писал(а):
09.10.2006 22:57
создаем объектные файлы для каждого cpp, а потом все эти объектные одной строкой в исполняемый
Да.
Спасибо сказали:
Аватара пользователя
Ballantre
Сообщения: 114
ОС: Linux

Re: Компиляция

Сообщение Ballantre »

Спасибо!
Я двадцать лет знал его и всегда ненавидел, и всегда восхищался, и всегда по-рабски боялся его.
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458

Re: Компиляция

Сообщение powerfox »

(Ballantre @ Oct 9 2006, в 22:28) писал(а):Каким образом производится компиляция многомодульных программ

(Zeus @ Oct 9 2006, в 22:38) писал(а):Каждый модуль сомпилируешь с опцией "только компиляция (без линковки)"

Вообще, начинающий программист должен владеть терминологией: С++ не является модульным языком, а объектный файл != модуль.
Спасибо сказали:
Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Компиляция

Сообщение ety »

powerfox писал(а):
09.10.2006 23:55
(Ballantre @ Oct 9 2006, в 22:28) писал(а):
Каким образом производится компиляция многомодульных программ

(Zeus @ Oct 9 2006, в 22:38) писал(а):Каждый модуль сомпилируешь с опцией "только компиляция (без линковки)"

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

не совсем (на C++ можно кодировать в модульном стиле юзая namespaces, а на чистом Си префиксы) вот тут лекция по CS:
http://www.ergeal.ru/archive/cs/tp/07.htm

допустим, я сейчас работаю с машинным кодом: у меня сырец x86dis.cpp переводящий одну бинарную инструкцию в символьное представление (с которым просто работать), и его интерфэйс x86dis.h - вмести они образают модуль, который используется в dis.c (дизассемблер), и dcc.c (декомпилер), которые так-же юзают еще и модули elf.h/elf.c, pe.c/pe.h, и getopt из стандартной библиотеки. компилируется это все одним Makefile с целями dis и dcc, причем каждая из целей юзает обьектный фаил x86dis.o.

так что "модуль" это более общее (абстрактное) понятие, нежели объектный фаил или привзяка функций к одному нэйм-спэйсу.
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Компиляция

Сообщение Zeus »

powerfox писал(а):
09.10.2006 23:55
Вообще, начинающий программист должен владеть терминологией: С++ не является модульным языком, а объектный файл != модуль.

Да ла-адна придираться-то! :)
Я как-то без этого сокровенного знания спокойно обхожусь уже лет 8-9 и ничего.
Спасибо сказали:
Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux

Re: Компиляция

Сообщение polachok »

А почему не gcc a.c b.c c.c -o bin?
И немедленно выпил.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Компиляция

Сообщение serzh-z »

polachok писал(а):
10.10.2006 18:17
А почему не gcc a.c b.c c.c -o bin?
Чтобы понятнее было.
Спасибо сказали: