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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы со сборкой программы 
V
    Опции темы
IValdemar
Дата 23.3.2012, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня была программа примерно под 400 строк кода, я почитал про модульное программирование и решил разбить ее на модули. Разбить то я разбил, а вот собрать теперь не получается. В общем компилятор при сборке в файлы .o натыкается на множественное объявление.
Полный код ошибок:
Код

||=== Snake, Debug ===|
obj\Debug\general_func.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|multiple definition of `C_(POINT_R2)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\general_func.o||In function `Z8_inverseR8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|multiple definition of `_inverse(POINT_R2&)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|first defined here|
obj\Debug\general_func.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|40|multiple definition of `hstdout'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\general_func.o||In function `_tcf_0':|
E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|multiple definition of `Score'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|40|first defined here|
obj\Debug\general_func.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|multiple definition of `hstdin'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|first defined here|
obj\Debug\main.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|multiple definition of `C_(POINT_R2)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\main.o||In function `Z8_inverseR8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|multiple definition of `_inverse(POINT_R2&)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|first defined here|
obj\Debug\main.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|multiple definition of `hstdout'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\main.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|40|multiple definition of `Score'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|40|first defined here|
obj\Debug\main.o||In function `_tcf_0':|
E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|multiple definition of `hstdin'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|first defined here|
obj\Debug\RedApple.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|multiple definition of `C_(POINT_R2)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\RedApple.o||In function `Z8_inverseR8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|multiple definition of `_inverse(POINT_R2&)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|first defined here|
obj\Debug\RedApple.o||In function `ZN8RedApple6ReDrawEv':|
E:\Work\CodeBlocks\Project\Snake\RedApple.cpp|8|multiple definition of `hstdout'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\RedApple.o||In function `ZN8RedApple6ReDrawEv':|
E:\Work\CodeBlocks\Project\Snake\RedApple.cpp|7|multiple definition of `hstdin'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|first defined here|
obj\Debug\RedApple.o||In function `ZN8RedApple6ReDrawEv':|
E:\Work\CodeBlocks\Project\Snake\RedApple.cpp|8|multiple definition of `Score'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|40|first defined here|
||=== Build finished: 30 errors, 0 warnings ===|



Никак не пойму что ему не нравится. Понятно что множественное объявление, несколько раз пересобирал - все тщетно. Как можно отловить ошибку которая появляется в момент создание object файлов?

Все бинарники прикрепил архивом.

P.S Если имеет значение, то пользуюсь MinGW и CodeBloks. Но я думаю тут не в компиляторе проблема smile 


Это сообщение отредактировал(а) IValdemar - 23.3.2012, 00:05

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Snake.rar 6,09 Kb
PM MAIL Skype   Вверх
boostcoder
Дата 23.3.2012, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



стражи в хидерах отсутствуют.
PM WWW   Вверх
IValdemar
Дата 23.3.2012, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @  23.3.2012,  01:05 Найти цитируемый пост)
стражи в хидерах отсутствуют. 

Да?
Я думал вот это
Код

#ifndef REDAPPLE_H_INCLUDED
#define REDAPPLE_H_INCLUDED

он и есть.
Я не прав?
Или вы имеете в виду что-то другое?
PM MAIL Skype   Вверх
boostcoder
Дата 23.3.2012, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



да, я ошибся.

тогда, во первых - перенеси реализации free-функций из хидеров в .cpp, или добавь inline.
во вторых - "point_R2.h|40|multiple definition of `hstdout'" - там нет символа hstdout. логи от другой модификации исходников?
PM WWW   Вверх
xvr
Дата 23.3.2012, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



В console_handle.h убери
Код

HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE); // Console output handle
HANDLE hstdin  = GetStdHandle(STD_INPUT_HANDLE);  // Console input handle
и напиши просто
Код

extern HANDLE hstdout;
extern HANDLE hstdin;

А то, что убрал, перенеси например в main.cpp


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


Новичок



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

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



xvr Сделал как вы сказали.
Ошибок стало меньше
Код

||=== Snake, Debug ===|
obj\Debug\general_func.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|multiple definition of `C_(POINT_R2)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\general_func.o||In function `Z8_inverseR8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|multiple definition of `_inverse(POINT_R2&)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|first defined here|
obj\Debug\general_func.o||In function `_tcf_0':|
E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|multiple definition of `Score'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|first defined here|
obj\Debug\main.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|multiple definition of `C_(POINT_R2)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\main.o||In function `Z8_inverseR8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|multiple definition of `_inverse(POINT_R2&)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|first defined here|
obj\Debug\main.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|40|multiple definition of `Score'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|first defined here|
obj\Debug\RedApple.o||In function `Z2C_8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|multiple definition of `C_(POINT_R2)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|36|first defined here|
obj\Debug\RedApple.o||In function `Z8_inverseR8POINT_R2':|
E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|multiple definition of `_inverse(POINT_R2&)'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\point_R2.h|44|first defined here|
obj\Debug\RedApple.o||In function `ZN8RedApple6ReDrawEv':|
E:\Work\CodeBlocks\Project\Snake\RedApple.cpp|7|multiple definition of `Score'|
obj\Debug\Snake.o:E:\Work\CodeBlocks\Project\Snake\snake_defines.h|40|first defined here|
||=== Build finished: 18 errors, 0 warnings ===|


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


pattern`щик
****


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

Репутация: 49
Всего: 110



Цитата(IValdemar @  23.3.2012,  13:20 Найти цитируемый пост)
C_(POINT_R2)

Цитата(IValdemar @  23.3.2012,  13:20 Найти цитируемый пост)
_inverse(POINT_R2&)

нужно повторять?
PM WWW   Вверх
IValdemar
Дата 23.3.2012, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @  23.3.2012,  01:30 Найти цитируемый пост)
логи от другой модификации исходников?

Нет, логи точно от этой. 

Цитата(boostcoder @  23.3.2012,  01:30 Найти цитируемый пост)
тогда, во первых - перенеси реализации free-функций из хидеров в .cpp, или добавь inline.

А какие у меня free функции не в cpp? 
Разве что
Код

COORD C_(POINT_R2 P) //convert POINT_R2 to COORD
{
    COORD ret;
    ret.X=P.x;
    ret.Y=P.y;
    return ret;

}
void _inverse(POINT_R2& N)
{
    N.x*=(-1);
    N.y*=(-1);
}


Поменял на 
Код

inline COORD C_(POINT_R2 P) //convert POINT_R2 to COORD
{
    COORD ret;
    ret.X=P.x;
    ret.Y=P.y;
    return ret;

}
inline void _inverse(POINT_R2& N)
{
    N.x*=(-1);
    N.y*=(-1);
}

Также в файле snke_defines.h
Код

extern char defchar;
extern int speed;
extern int Score;
extern const bool bSmartBody;
extern const char* szVersion;

Определения переменных засунул в main.cpp

Все отлично программа собралась и заработала smile 
Я так понимаю, что определения переменных оказались в нескольких cpp, отсюда несколько объявлений.

Теперь возникла странность: в компиляторе все работает, но если попытаться запустить через exe пишет такое сообщение
Приложению не удалось запуститься, поскольку libgcc_s_dw2-1.dll не был найден. smile 
Что это такое? И почему при запуске в C::B все работает?

Это сообщение отредактировал(а) IValdemar - 23.3.2012, 13:43
PM MAIL Skype   Вверх
boostcoder
Дата 23.3.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



Цитата(IValdemar @  23.3.2012,  13:40 Найти цитируемый пост)
Приложению не удалось запуститься, поскольку libgcc_s_dw2-1.dll не был найден

из mingw/bin скопируй эту dll`ку туда же, где лежит полученный бинарь. и так со всеми dll`ками которые будет просить.
а лучше, пропиши в PATH путь к mingw/bin

PM WWW   Вверх
IValdemar
Дата 23.3.2012, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



boostcoder, Что-то я никак не могу найти
Цитата(boostcoder @  23.3.2012,  13:44 Найти цитируемый пост)
 пропиши в PATH путь к mingw/bin
 smile 

И даже если я добавлю, это значит у других она запускаться не будет? У тех у кого вообще нет MInGW как тогда быть?
PM MAIL Skype   Вверх
boostcoder
Дата 23.3.2012, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



Цитата(IValdemar @  23.3.2012,  13:52 Найти цитируемый пост)
как тогда быть? 

качаешь одну из моих сборок, собираешь прогу с ключом '-static'.
хотя проверь, может быть тот мингв что у тебя, тоже поддерживает '-static'

PM WWW   Вверх
IValdemar
Дата 23.3.2012, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



boostcoder, 
А почему он вообще библиотеку запросил? Когда я эту программу в одном файле собирал все работало. От чего это зависит?

Скачал, собираю с ключом -static эффекта нету smile 
Может я не там прописываю? Я прописал в Setting->Compiler and Debugger->Other Setting
В Compiler flags -static нету.

Это сообщение отредактировал(а) IValdemar - 23.3.2012, 15:21
PM MAIL Skype   Вверх
boostcoder
Дата 23.3.2012, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



Цитата(IValdemar @  23.3.2012,  15:15 Найти цитируемый пост)
Когда я эту программу в одном файле собирал все работало.

тебе показалось.

Цитата(IValdemar @  23.3.2012,  15:15 Найти цитируемый пост)
Я прописал в Setting->Compiler and Debugger->Other Setting

я не знаю что это.

есть CFLAGS, CXXFLAGS, LDFLAGS, CPPFLAGS. остальное все херня.

PM WWW   Вверх
IValdemar
Дата 23.3.2012, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



boostcoder, 
Разобрался где в C::B надо опции дописывать так что теперь все работает как надо smile Спасибо! 

P.S А в одном файле я ее собирал до обновления MinGW (с неделю как обновил).
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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