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

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

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

Студворк — интернет-сервис помощи студентам
Возможно заезженная тема, но не получается собрать несколько файлов в один. Что пишет гугл, не помогает, 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.01.2015, 02:29
Ответы с готовыми решениями:

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

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

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

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

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

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

Решение

S_kepti_k,В дополнение в вышесказанному.
Если все cpp-файлы проекта в одной папке и других нет
Code
1
g++ *.cpp -o first
Можно компилировать модули по отдельности
Code
1
g++ -c opis.cpp
создаст объектный файл opis.o
А когда все модули уже скомпилированы, их можно собрать в кучку
Code
1
g++ *.o -o first
Вообще, посмотри список флагов q++. Чтение увлекательнейшее!
1
16 / 4 / 4
Регистрация: 19.09.2012
Сообщений: 107
29.01.2015, 17:45  [ТС]
andreysv Добавил
C++
1
#include "class.h"
в файл main.cpp и компилирую как вы и написали
C++
1
g++ main.cpp opis.cpp -o first
Выдает ошибки. Скрин приложу
0
16 / 4 / 4
Регистрация: 19.09.2012
Сообщений: 107
29.01.2015, 17:47  [ТС]
Байт по отдельности тоже не хочет ((
0
18 / 18 / 6
Регистрация: 02.07.2011
Сообщений: 67
29.01.2015, 18:11
Лучший ответ Сообщение было отмечено 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  [ТС]
andreysv Спасибо, помогло - работает
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.01.2015, 18:43
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru