Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компиляция нескольких файлов в ком строке, g++ 
V
    Опции темы
americanets
Дата 29.7.2008, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



если работаю в ide (KDevelop) то просто добавляю файлы в проект все компилица нормально.

но хочу руками пробовать, тк ide не дает понимания некоторым вещам,а для новичков как я это не есть хорошо.

вопрос

у меня есть файл cpp с реализацией класса, есть заголовочный hpp с описанием класса

соответственно подключаю его 

Код

#include <test.hpp>


компилю

Код

g++ -o test test.cpp 


но компилятор выдает ошибку, как компилить проекты состоящие из нескольких файлов ? 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SABROG
Дата 29.7.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Создать makefile. А .hpp файл находится в той же папке что и test.cpp ?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
americanets
Дата 29.7.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



да, в той же папке что и test.cpp

Добавлено через 9 минут и 48 секунд
а можно создавать make файлы автоматом ? 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
SABROG
Дата 29.7.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



А на ошибку можно взглянуть ?

В *никсах для этого существует libtools, а в винде надо ручками писать, ну или использовать другие build системы, типа scons, cmake.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
americanets
Дата 29.7.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



ошибки примерно седующие, не могу подключить test.hpp , не найден класс такой-то и т д, те по мимо что не может найти и подключить выводит ошибки компияции тк без заголовочного на самом деле описания класса нет,
точную формулировку привести не могу, тк нет под рукой компилятора

за libtools спасибо, посмотрю, а винда меня не интересует 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
mekhanikus
Дата 29.7.2008, 11:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: нет
Всего: 1



Цитата(americanets @ 29.7.2008,  09:58)
Код

#include <test.hpp>

Имхо, если имя файла в угловых скобках <>, то компилятор ищет его в папке "include".
Файл, расположеный в той же папке, надо подать в кавычках "".
PM MAIL   Вверх
americanets
Дата 29.7.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



mekhanikus, спасибо, попробую


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
system
Дата 29.7.2008, 12:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 16.5.2008

Репутация: 1
Всего: 2



Компилировать можно по разному
Например имеем файлы
f1.cpp
Код
 
#include <stdio.h>
void f1() { printf( "f1\n" ); }


f2.cpp
Код
 
#include <stdio.h>
void f2() { printf( "f1\n" ); }


main.cpp
Код
 
#include <stdio.h>
void f1();
void f2();
int main() {
 f1();
 f2();
 }


Обратите внимание что в main.cpp совершенно не понятно где находится 
реализация функций f1 и f2, Если скажем мы бы в файле main.cpp
подключили #include "f1.cpp" и #include "f2.cpp" то
могли бы скомпилить файл одной строкой g++ main.cpp -o main
и получили на выходе исполняемый main. ( Но не могли скомплироать спосбом описанным ниже, скажу позже почему). Но тут несколько иначе.

Поэтому можем скомплировать следующей последовательностью
сначала создаем объектники а потом их компонуем в исполняемый файл
на примере выше это будет выглядеть так

Код

  g++ -c -o "f1.o" f1.cpp 
  g++ -c -o "f2.o" f2.cpp
  g++  -c -o  "./main.o" main.cpp 
  g++ f1.o f2.o main.o -o "main"

в последней строке происходит уже линковка объектников, т/е
если мы комплируем таким образом, то задача откуда будет вызвана функция 
ложится на линковщик. 

Резюмируем так, 
 Если компилятор видит реализацию функции то она не должна быть в линкуемых 
 объектах иначе будет ошибка линковки, в нашем примере 
 
 Если мы подключили f1.cpp в загловке а в этом файле есть реализация
 то не должно быть линкуемого объекта f1.o так как его тело уже будет 
находится в main.o и 
 Если реализация функции не видна должен быть объектник в котором она будет
 находится либо подключаемая библиотека в которой так же находится реализация
 функции. 



PM MAIL   Вверх
americanets
Дата 29.7.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



system, спасибо, + 1


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 30.7.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



Код

#include "test.hpp"


компилирует

 всем спасибо


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.