C++ a SDL - nejde zkompilovat – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

C++ a SDL - nejde zkompilovat – C / C++ – Fórum – Programujte.comC++ a SDL - nejde zkompilovat – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Taine
~ Anonymní uživatel
11 příspěvků
27. 7. 2008   #1
-
0
-

Ahoj,

pod linuxem napsal jsem programek vyuzivajici SDL a bez problemu prelozil. Problem je v tom, ze ho potrebuju funkcni i pod windows.

Uz jsem nad tim ztravil hodne casu, zkousel jsem nejprve DevC++, pak samostatne MinGW a ted i Code::Blocks. Cetl jsem ruzne navody na internetu.

Problem je, ze porad dostavam chybu, ktera je zachycena na prilozenem screenshotu (resp. v MinGW a v Code::Blocks; v DevC++ jsem dostaval chybu 'undefined reference to 'WinMain@16'', presto, ze to byla konzolova aplikace.

SDL-devel-1.2.13-mingw32 jsem si stahl, prekopiroval potrebne knihovny a hlavickove soubory a pridal i potrebne parametry pro linker.

Nevite nekdo, co s tim ? Diky Taine

Nahlásit jako SPAM
IP: 212.111.4.–
Reklama
Reklama
Jura
~ Anonymní uživatel
634 příspěvků
27. 7. 2008   #2
-
0
-

Zdravím,

jsi si jistý, že máš přilinkované všechny potřebné knihovny? Konkrétněji libSDLmain.a?

Nahlásit jako SPAM
IP: 85.207.192.–
Taine
~ Anonymní uživatel
11 příspěvků
27. 7. 2008   #3
-
0
-

Ano, mam (viz dalsi screen) - takto mam nastavene Project -> Build Options -> Linker settings (jak pro debug tak pro release) a stejne mam nastavene i Settings -> Compiler and Debuger -> Linker Settings.

Diky Taine

Nahlásit jako SPAM
IP: 212.111.4.–
Earl Cash0
Věrný člen
27. 7. 2008   #4
-
0
-

s SDL jsem nikdy moc nedelal, ale pamatuju si, ze bylo potreba nakopirovat nejaky .dll soubor bud do slozky s programem nebo do nektere ze systemovych......

Nahlásit jako SPAM
IP: 193.85.184.–
Oh my goodness, shut me down! Machines making machines. How perverse. (C-3PO)
Jura
~ Anonymní uživatel
634 příspěvků
27. 7. 2008   #5
-
0
-

To Taine :

No,tak jsem vygooglil nějaký návod, ješě to zkus podle něj:
http://gpwiki.org/index.php/SDL:Tutorials:Setup#Windows:_MinGW

Nahlásit jako SPAM
IP: 85.207.192.–
Taine
~ Anonymní uživatel
11 příspěvků
27. 7. 2008   #6
-
0
-

To Earl Cash : soubor SDL.dll ve vychozi slozce projektu mam, ale jestli si dobre vzpominam, tak jeho absence by se stejne neprojevila pri kompilaci, ale az po spusteni

To Jura : delal jsem to presne tak, jak pisou na GPwiki, procetl jsem uz predtim hodne podobnych tutorialu ... zkousel jsem to znovu, ale porad to hlasi stejnou chybu (i kdyz pouziju ciste g++ z prikazoveho radku).

Taine

Nahlásit jako SPAM
IP: 212.111.4.–
survik1
~ Moderátor
0
Posthunter
27. 7. 2008   #7
-
0
-

To Taine : Podívej se na root, tam je celý seriál o SDL, vč. instalace

Nahlásit jako SPAM
IP: 89.102.163.–
Život je jen hra, která se nedá vyhrát.
Taine
~ Anonymní uživatel
11 příspěvků
27. 7. 2008   #8
-
0
-

Problem uz jsem vyresil. misto int main() bylo nutne zadat int main(int argc, char *argv[]), coz je divne, protoze predtim v DevC++ jsem toto zkousel a nepomohlo to. Hlavne ze uz to funguje :)

Vyskytl se ale dalsi problem. Snazim se prelozit dalsi verzi, ale kompilace se prerusi s touto chybovou hlaskou: undefined reference to `vtable for MainState'|. Cely chybovy vystup je videt na prilozenem screenu.

Obsah souboru GameStates.hpp, ve kterem by chyba mela byt:



#ifndef GAMESTATE_HPP_
#define GAMESTATE_HPP_

#include <SDL/SDL.h>

#include "main.hpp"

// abstraktni trida, vychozi trida hernich stavu
// implementuje pouze signalizaci zmeny stavu
// NOTICE: kazdy herni stav musi byt potomkem teto tridy
class GameState
{
protected:
// signal zmeny stavu
GAME_STATE statechange;
public:
// vychozi konstruktor nastavi statechange na S_NOSTATE - signal zachovani aktualniho herniho stavu
GameState() { statechange = S_NOSTATE; }
// vola stavovy stroj, aby zachytil pripadny signal zmeny stavu
GAME_STATE getstatechange() { return statechange; }

virtual void start() = 0;
virtual void input(SDL_Event event) = 0;
virtual void update(long time) = 0;
virtual void draw() = 0;
virtual void stop() = 0;
};

// trida hlavniho herniho stavu, potomek tridy GameState
class MainState : public GameState
{
private:
public:
// inicializace herniho stavu
void start();
// obsluha vstupu
void input(SDL_Event event);
// aktualizace sceny
void update(long time);
// vykresleni sceny
void draw();
// deinicializace herniho stavu
void stop();
};

// trida hlavniho herniho stavu, potomek tridy GameState
class IntroState : public GameState
{
private:
enum { TIMEMAX = 10000 };
public:
// inicializace herniho stavu
void start();
// obsluha vstupu
void input(SDL_Event event);
// aktualizace sceny
void update(long time);
// vykresleni sceny
void draw();
// deinicializace herniho stavu
void stop();
};

#endif


Zda se mi to divne, protoze metody tridy GameState, ktere nejsou inline, jsou definovane jako ciste virtualni a u potomku MainState a IntroState jsou ve zvlastnich souborech vsechny metody rozepsane.

Na linuxu jsem program prelozil bez problemu.

Taine

Nahlásit jako SPAM
IP: 217.197.149.–
Jura
~ Anonymní uživatel
634 příspěvků
27. 7. 2008   #9
-
0
-

No, takhle se to těžko odhaduje, nicméně ujisti se, že máš u VŠECH potomků dopsány implmentace všech čistě virtuálních metod a taky tam nikde nevidím, že bys definoval virtuální destruktory - což je taky důležíté - kompilátor je tuším sám negeneruje.

Nahlásit jako SPAM
IP: 85.207.192.–
Taine
~ Anonymní uživatel
11 příspěvků
28. 7. 2008   #10
-
0
-

U vsech potomku jsou dopsane implementace vsech peti ciste virtualnich metod. Virtualni destruktory definovane nejsou - nejsou ani potreba, protoze se zatim nikde zadna dynamicka pamet neprideluje. Nicmene, zkusil jsem se doplnit, ale nepomohlo to.

Zalozim pro tenhle problem nove tema a pridam tam i kompletni zdrojovy kod, kdyby se mi na to chtel nekdo podivat.

Kazdopadne diky, Taine

Nahlásit jako SPAM
IP: 217.197.149.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 71 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý