Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ошибка при Linking.


Автор: KPEHDEL 24.4.2012, 18:53
Здравствуйте форумчани.

Требуется помощь.

Компилирую проект, как только дело дходит до Linking появляется следующая ошибка:
Код

--------------------Configuration: Armagetron - Win32 Debug--------------------
Linking...
LIBCMT.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
..\..\dist\armagetron_debug.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

armagetron_debug.exe - 2 error(s), 0 warning(s)


Подскажите пожалуйста в чём дело.
С нетерпением жду вашего ответа.

Автор: Randajad 24.4.2012, 18:56
ЧСХ, функции WinMain нет.
Компилятору студийному она нужна всегда, когда приложение не консольное.

Автор: KPEHDEL 24.4.2012, 19:20
/*Случайно стёр текст*/

Автор: Randajad 24.4.2012, 19:28
Компиляй GCC и будет щастье.
Или в раздел для новичков следует обратиться дабы узнать в чем различие WinMain и main и как их нужно применять.

Автор: KPEHDEL 24.4.2012, 19:48
В раздел для новичков обязательно схожу, но не дублировать ведь там тему, правильно?
К сожалению мне надо именно на vs. Предположим я знаю, что функция WinMain вызывается системой как начальная точка входа, для базирующейся на Windows, прикладной программы.

Только вот совершенно не понятно где её требуется объявить в исходных кодах armagetron_src_0.1.4.9.

Добавлено через 4 минуты и 35 секунд
Залил исходники(с прикреплёнными файлами) на всякий, может кто решится посмотреть...
http://www.fayloobmennik.net/1827668

Автор: Randajad 24.4.2012, 22:37
Аннет, код ужасен и на GCC без правок не соберется.
Это исходники официальные? Что-то беглым осмотром не нашел ни winmain, ни main. Завтра еще посмотрю.
И почему только VC необходимо, если не секрет?

Автор: KPEHDEL 25.4.2012, 10:25
Во первых, спасибо, что ответил и посмотрел.
Исходники офицальные(правда качал не с офф сайта там http://beta.armagetronad.net/?product=client&branch=Any&hideold=0&hideold=1&os=Windows&arch=&bitness=&format=#download все ссылки битые. Но если в гугле вбить например armagetron_src_0.1.4.9.tar.gz то найти можно легко) почти самая старая версия(она мне и нужна).

VC не обходима так как сижу под виндой. Ну, а так как в исходниках был проект под VS 6.0 то я и подумал, что под VS было бы удобнее всего.

Хотя если удастся скомпилировать под Bloodshed Dev-C++ или под Code::Blocks виндовую  тоже пойдёт.

Сейчас ещё скачаю исходники http://sourceforge.net/projects/armagetronad/files/stable/0.2.8.3.2/armagetronad-0.2.8.3.2.src.zip/download их попробую скомпилить в Code::Blocks, в документации сказано, что последнии версии ей компилят.
О результатах отпишусь. Хотя конечно предпочтительнее была бы старая версия.

Цитата

Завтра еще посмотрю.


Буду благодарен если посмотришь.

Автор: Randajad 25.4.2012, 12:15
А GCC под виндой типа не бывает? smile

Автор: KPEHDEL 25.4.2012, 13:57
Эм, ну GCC для Windows это по сути Dev-C++ которую я упомянул выше.

Автор: borisbn 25.4.2012, 14:11
Цитата(KPEHDEL @  25.4.2012,  13:57 Найти цитируемый пост)
 GCC для Windows это по сути Dev-C++ которую я упомянул выше. 

да ладно... а мужики-то не знали...

KPEHDEL,  Dev-C++ и Code::Blocks - редакторы текста с элементами IDE, а gcc под windows - это либо сам gcc, запущенный под antiWINEcygwin или специально собранный под windows компилятор gcc (вернее набор компиляторов и виндовых библиотек) - aka MinGW

По сути: этот твой armagetron случаем не библиотека ? Если так, то там и не должно быть ни main, ни WinMain. Такая ф-ция должна быть в твоей программе, которая эту библиотеку использует

Автор: KPEHDEL 25.4.2012, 14:13
Спасибо, что объяснил. Велика ли разница собрать в Code::Blocks или MinGW?

Код

По сути: этот твой armagetron случаем не библиотека ?


Нет, это не библиотека.

Автор: EnergoHokum 25.4.2012, 14:32
http://rsdn.ru/article/cpp/crt.xml.

Автор: Randajad 25.4.2012, 15:01
Два часа усилий окупились! smile
Пытался сначала собрать то, что выложил афтар, оно потребовало кучу всяких libpng, sdl, sdl_mixer и over9000 других библиотек. Вроде, собрал, но линковаться это чудо не захотело. smile
Потом я начал гуглить. И нашел:

Код

How to compile 0.4 in Windows 7 with Code::Blocks 10.05

Before everything, get Code::Blocks 10.05 with included mingw.
I downloaded and installed codeblocks-10.05mingw-setup.exe from http://www.codeblocks.org/downloads/26

1.
Make a svn checkout from
https://armagetronad.svn.sourceforge.net/svnroot/armagetronad/armagetronad/branches/0.4


2.
Edit ..\armagetronad\win32\python.bat and change line 7 to your installation location of python

3.
Edit ..\armagetronad\src\defs.h and comment out line 122 and 125
The block should look like this:
Code:
//#ifndef HAVE_ISBLANK
// this function does not seem to exist in windows and solaris 2.8
inline bool isblank(int x){ return ((x == ' ') || (x == '\t')); }
//#endif


4.
Run ..\armagetronad\win32\update_version.bat

4.
Open ..\armagetronad\win32\code_blocks\ArmagetronAd.workspace in Code::Blocks
I only build the client so I closed the dedicated and master projects (right click -> close project).
Also I set the Build target to win32 release (saves you some time if you dont want to debug)

5.
Build everything in Workspace except "Armagetron Advanced".

6.
Run ..\armagetronad\win32\makedist.bat
Run ..\armagetronad\win32\protobuf.bat

7.
Build "Armagetron Advanced"

8.
You find the build in ..\armagetronad\build\dist\
You can run the .exe from there or generate an installer with the .nsi script.


Вообщем, еще чуть правля их исходники мне удалось собрать это до вроде как работоспособного состояния. smile
Собирается теперь и под gcc 4.8 тоже.

http://acomirei.ru/armagetron.7z
В папке armagetronad\build\dist готовая экзешка.
Для сборки достаточно:
1) Open ..\armagetronad\win32\code_blocks\ArmagetronAd.workspace in Code::Blocks
2) Build "Armagetron Advanced"

Автор: borisbn 25.4.2012, 15:09
Цитата(KPEHDEL @  25.4.2012,  14:13 Найти цитируемый пост)
Велика ли разница собрать в Code::Blocks или MinGW?

Первое - редактор (с элементам IDE). Второе - компилятор. Набери эти два слова в вики и посмотри, велика ли разница.
Code::Blocks, если я не ошибаюсь, может компилировать как M$-овским компилятором, так и MinGW (вполне возможно, что и ещё пару-тройкой). А вот MSVS компилировать при помощи MinGW - нет.


KPEHDEL, кстати, если тебе не хватает репутации, чтобы плюсануть Randajad за проделанную работу, просто скажи.

Автор: KPEHDEL 25.4.2012, 15:22
EnergoHokum, спасибо прочту обязательно.
Randajad, тебе отдельное огромное спасибо, за проделанную работу.

Цитата

KPEHDEL, кстати, если тебе не хватает репутации, чтобы плюсануть Randajad за проделанную работу, просто скажи. 

Да. "У Вас недостаточно постов, чтобы изменять репутацию пользователей. Необходимо 100 постов."
А плюсануть очень хочется! smile 

Цитата

Code::Blocks, если я не ошибаюсь, может компилировать как M$-овским компилятором

Собственно ты и ответил на мой вопрос.

Автор: Randajad 25.4.2012, 15:40
Кодблокс имеет поддержку компиляторов эдак 10-ти точно. smile
Годный редактор, его и юзаем. smile
Афтар, если есть асечка и вопросы - 418 107 306 стукать. smile

Автор: borisbn 25.4.2012, 16:29
Цитата(KPEHDEL @  25.4.2012,  15:22 Найти цитируемый пост)
А плюсануть очень хочется!

Done

Автор: KPEHDEL 25.4.2012, 16:33
Цитата

Для сборки достаточно:
1) Open ..\armagetronad\win32\code_blocks\ArmagetronAd.workspace in Code::Blocks
2) Build "Armagetron Advanced"


codeblocks-10.05mingw

Открываю ..\armagetronad\win32\code_blocks\ArmagetronAd.workspace
1) Open ..\armagetronad\win32\code_blocks\ArmagetronAd.workspace in Code::Blocks
2) Build "Armagetron Advanced"

Но не тут-то было.

Выдаёт такие ошибки:
Код

C:\Users\CyberGod\Desktop\armagetron\armagetronad\src\engine\ePlayer.cpp|4046|error: `isblank' undeclared (first use this function)|
C:\Users\CyberGod\Desktop\armagetron\armagetronad\src\engine\ePlayer.cpp|4046|error: (Each undeclared identifier is reported only once for each function it appears in.)|


Не понятно, что с этим делать( Ща буду гуглить.

Автор: borisbn 25.4.2012, 17:00
 smile 
Цитата(KPEHDEL @  25.4.2012,  16:33 Найти цитируемый пост)
C:\Users\CyberGod\

с таким ником это мы все у тебя должны спрашивать  smile 

Автор: KPEHDEL 25.4.2012, 18:01
Проблему Randajad помог решить. Надо было расскоментить в defs.h и раскомменть там isblank. 

 smile 

Цитата

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


Для меня, как человека выросшем на великом "гозонокосильщике" этот ник выражает, не то кто я сейчас, а кем я должен стать.
Я студент, знаний в C/C++ ещё мало. Но буду стараться исправить это.
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)