Включение .h и .cpp в g++ (Непонятное явление)

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

Аватара пользователя
boh
Сообщения: 86
ОС: Debian Lenny

Включение .h и .cpp в g++

Сообщение boh »

Компилирую с помощью g++ примерно такой проект
Xbug.h
Xbug.cpp
XbugMain.cpp
Компиляция проходит успешно, а при сборке вываливаются ошибки:

Код: Выделить всё

/tmp/cc6yDGg7.o: In function `main':
XbugMain.cpp:(.text+0x35): undefined reference to `SomeClass::SomeMethod(int)'
XbugMain.cpp:(.text+0x40): undefined reference to `SomeClass::AnotherMethod()'
collect2: выполнение ld завершилось с кодом возврата 1
Compilation failed.

Погуглив, обнаружил, что для устранения ошибок можно включать в основную программу (XbugMain.cpp) не заголовочный файл Xbug.h, а Xbug.cpp. Тогда всё ОК. Но это же не правильно! Тем более я таким образом не могу пользоваться библиотеками, которые предоставляют только заголовочные файлы :unsure:
Кто поймёт мой вопрос, буду благодарен, а кто поможет, буду благодарен безмерно.
Я так люблю свою страну, и ненавижу государство! (LUMEN)
Дверь не ломай - пробуй в неё войти. (Кукрыниксы)
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2

Re: Включение .h и .cpp в g++

Сообщение mikluxo »

как компилируете?
где-то типа так:
g++ -c XbugMain.cpp Xbug.cpp
g++ XbugMain.o Xbug.o



ну или просто
g++ XbugMain.cpp Xbug.cpp
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
Аватара пользователя
boh
Сообщения: 86
ОС: Debian Lenny

Re: Включение .h и .cpp в g++

Сообщение boh »

Код: Выделить всё

g++ -Wall -c "XbugMain.cpp"
g++ -Wall "XbugMain.cpp" -o "XbugMain"

С помощью Geany
Я так люблю свою страну, и ненавижу государство! (LUMEN)
Дверь не ломай - пробуй в неё войти. (Кукрыниксы)
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2

Re: Включение .h и .cpp в g++

Сообщение mikluxo »

Ну вот и получается, у Вас должно быть два *.o файла, которые нужно вместе слинковать, но Вы указываете только один, вследствие чего появляется маленькая проблема(он не знает где реализация SomeClass и с чем его есть)
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
Аватара пользователя
boh
Сообщения: 86
ОС: Debian Lenny

Re: Включение .h и .cpp в g++

Сообщение boh »

Спасибо. Получается, ручками нужно всё это делать... Или IDE поумнее найти
Я так люблю свою страну, и ненавижу государство! (LUMEN)
Дверь не ломай - пробуй в неё войти. (Кукрыниксы)
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Re: Включение .h и .cpp в g++

Сообщение minoru-kun »

boh писал(а):
10.01.2009 13:38
Спасибо. Получается, ручками нужно всё это делать... Или IDE поумнее найти

Осмелюсь вам порекомендовать Emacs.
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2

Re: Включение .h и .cpp в g++

Сообщение mikluxo »

boh писал(а):
10.01.2009 13:38
Спасибо. Получается, ручками нужно всё это делать... Или IDE поумнее найти

можно makefile наваять. Обычно так и делают, и запускать make.
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
Аватара пользователя
Фантом
Сообщения: 463
ОС: openSUSE

Re: Включение .h и .cpp в g++

Сообщение Фантом »

Geany, вообще говоря, не IDE, а редактор с кое-какими дополнительными возможностями (что бы о нем не говорили), поэтому ничего особенного, в т.ч. и автоматической сборки проектов, от него ждать не стоит.

Самый, наверное, оптимальный вариант - написать Makefile, как уже советовали, после чего вызывать сборку требуемого вида из Geany. Для простых случаев можно залезть в "Задать параметры сборки" и переписать вызовы под себя.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Включение .h и .cpp в g++

Сообщение RasenHerz »

minoru-kun писал(а):
10.01.2009 14:07
Осмелюсь вам порекомендовать Emacs.

если разговор об IDE я бы все-таки посоветовал Net Beans 6.5 =)
emacs крут, но для неискушенного пользователя(коим на мой взгляд является топикстартер) будет лучше сидеть за настоящей IDE.
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2

Re: Включение .h и .cpp в g++

Сообщение mikluxo »

Вообще, для начала стоит разобраться в основах, попрогить без всяких удобств. К примеру когда жаву осваивал, писал исключительно на JCreatorPro там менюшки выпадающие и т.п. Потом как за простой редактор сел(а в универе у нас только простые были на тот момент) и действительно "сел". По десять минут вспоминал, как функция называется и какие параметры передавать. Пришлось пересесть на JCreatorLE. Так что, IDE это хорошо, но начинать с нее нельзя.
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Включение .h и .cpp в g++

Сообщение RasenHerz »

думаю дело в другом - тогда вы не видели необходимость запоминать эти функции, я тоже так "садился" =)) сейчас библиотечные функции знаю как Отче Наш.
свободно работаю и в IDE и в Emacs.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Включение .h и .cpp в g++

Сообщение Stauffenberg »

mikluxo писал(а):
10.01.2009 14:11
можно makefile наваять

+1

что-то типа

name: XbugMain.o Xbug.o
g++ $^ -o $@
XbugMain.o: name.h
Xbug.o: name.h
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
boh
Сообщения: 86
ОС: Debian Lenny

Re: Включение .h и .cpp в g++

Сообщение boh »

Спасибо, решил вопрос созданием makefile. Насчёт emacs - согласен, но нужно время на освоение.

Кстати, Code::Blocks, который, вроде как, полноценная IDE, тоже отказался догадываться о моих непонятных связях между сорцами.
Я так люблю свою страну, и ненавижу государство! (LUMEN)
Дверь не ломай - пробуй в неё войти. (Кукрыниксы)
Спасибо сказали:
Аватара пользователя
whirlwind
Сообщения: 67

Re: Включение .h и .cpp в g++

Сообщение whirlwind »

считайте это частью linux-way
Добро всегда побеждает зло. Мы победили, значит мы - добро.
Спасибо сказали: