С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/231: Рейтинг темы: голосов - 231, средняя оценка - 4.84
16 / 4 / 4
Регистрация: 19.09.2012
Сообщений: 107
1

Как скомпилировать несколько файлов через консоль g++

29.01.2015, 02:29. Показов 42564. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возможно заезженная тема, но не получается собрать несколько файлов в один. Что пишет гугл, не помогает, 5-й час проблему ищу. Напишу оч. простенький пример, сама суть как скомпилировать? Пользуюсь Ubuntu 14.04. Есть 3 файла:
class.h
C++
1
2
3
4
5
6
7
class book
{
int x=2;
int y=3;
public:
void display ();
};
opis.cpp
C++
1
2
3
4
5
6
7
8
#include "class.h"
#include <iostream>
using namespace std;
 
void book :: display ()
{
cout << x << " " << y << endl;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
#include "opis.cpp"
using namespace std;
 
int main ()
{
book bo;
bo.display();
return 0;
}
Как в консоли правильно скомпилировать это файлы? Если есть один файл first.cpp тот же "hello word" написан,компилирую так
g++ first.cpp -o first
если больше файлов, уже не получается, даже по отдельности. куча ошибок выдает.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2015, 02:29
Ответы с готовыми решениями:

Как скомпилировать программу написанную на Паскаль через консоль?
Помогите, пожалуйста. Как скомпилировать программу написанную на Паскаль через консоль. Есть файл...

Как скомпилировать несколько папок и файлов в EXE?
Как скомпилировать в exe одновременно и bat файл (который должен исполняться), и файлы, необходимые...

Как скомпилировать несколько .py файлов в один .exe?
Есть 8 взаимодействующих пайтон-файлов. Как скомпилировать их в один .exe? Можно ли это сделать с...

Как скомпилировать несколько файлов Python в один exe?
Здравствуйте, я написал калькулятор, но как скампилировать main и ui в один exe не знаю помогите...

6
18 / 18 / 6
Регистрация: 02.07.2011
Сообщений: 67
29.01.2015, 04:00 2
Создание исполняемого файла проходит в два этапа: компиляция и компоновка. g++ позволяет запустить этот процесс в одну строчку. Во время компиляции работает компилятор и генерирует объектные файлы. Здесь главное, чтоб все используемые функции были вами объявлены, но необязательно определены. В местах вызова функций компилятор оставляет пометки для компоновщика: "Здесь идёт вызов такой-то функции. В одном из объектных файлов она есть". Компиляция cpp-файлов идёт по одному, независимо от других. В итоге объектные файлы состоят из блоков исполняемого кода с пометками для компоновщика.

Компоновщик объединяет объектные файлы в исполняемый. В местах пометок правильно расставляются адреса, по которым можно вызвать нужную функцию. Так всё работает упрощённо в моём понимании))

Насчёт ваших файлов. В main.cpp в первой строчке должно быть:
C++
1
#include "class.h"
А в командной строке:
Код
g++ main.cpp opis.cpp -o first
Добавлено через 8 минут
Так как сейчас в main.cpp компилятор находит класс book, который нигде не определён. Неизвестно, например, есть ли у него конструктор без аргументов.
1
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
29.01.2015, 09:06 3
Лучший ответ Сообщение было отмечено S_kepti_k как решение

Решение

S_kepti_k,В дополнение в вышесказанному.
Если все cpp-файлы проекта в одной папке и других нет
Код
g++ *.cpp -o first
Можно компилировать модули по отдельности
Код
g++ -c opis.cpp
создаст объектный файл opis.o
А когда все модули уже скомпилированы, их можно собрать в кучку
Код
g++ *.o -o first
Вообще, посмотри список флагов q++. Чтение увлекательнейшее!
1
16 / 4 / 4
Регистрация: 19.09.2012
Сообщений: 107
29.01.2015, 17:45  [ТС] 4
andreysv Добавил
C++
1
#include "class.h"
в файл main.cpp и компилирую как вы и написали
C++
1
g++ main.cpp opis.cpp -o first
Выдает ошибки. Скрин приложу
Как скомпилировать несколько файлов через консоль g++
0
16 / 4 / 4
Регистрация: 19.09.2012
Сообщений: 107
29.01.2015, 17:47  [ТС] 5
Байт по отдельности тоже не хочет ((
Как скомпилировать несколько файлов через консоль g++
0
18 / 18 / 6
Регистрация: 02.07.2011
Сообщений: 67
29.01.2015, 18:11 6
Лучший ответ Сообщение было отмечено S_kepti_k как решение

Решение

Цитата Сообщение от S_kepti_k Посмотреть сообщение
Байт по отдельности тоже не хочет ((
Здесь работает как надо с файлом opis.cpp.
Warning - не ошибка, а предупреждение. Написано, что вы пишете по стандарту c++11 в некоторых местах.

В своём ответе забыл добавить, что первую строчку нужно не добавить, а заменить.
main.cpp:
C++
1
2
3
4
5
6
7
8
9
#include "class.h"
using namespace std;
 
int main ()
{
book bo;
bo.display();
return 0;
}
1
16 / 4 / 4
Регистрация: 19.09.2012
Сообщений: 107
29.01.2015, 18:43  [ТС] 7
andreysv Спасибо, помогло - работает
1
29.01.2015, 18:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2015, 18:43
Помогаю со студенческими работами здесь

Как разбить escript на несколько файлов и скомпилировать в один?
Привет народ, надо тут написать скрипт на эрланге, помогающий в обслуживании основной проги,...

Как скомпилировать несколько исходных файлов в исполняемый модуль в командной строке Visual Studio?
7.Как скомпилировать несколько исходных файлов в исполняемый модуль в командной строке Visual...

Скомпилировать, скомпоновать и запустить проект на Qt через консоль Windows
Как правильно скомпилировать,скомпоновать и исполнить(запустить) проект (программу) на Qt через...

Как скомпилировать программу через терминал состоящую из трёх файлов исходного кода?
Друзья, только начинаю изучать Линукс, работаю на ubuntu 18.04 Мне нужно скомпилировать программу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru