Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
16.11.2002, 21:46
snoopdog



Hi, ich bin grad dabei mich son bisschen in SDL + OGL einzuarbeiten. Naja nur da stoße ich gleich auf ein Problem.

DLmain.lib(SDL_main.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _SDL_main
Debug/testopenfile.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

ich hab absolut keine Ahnung warum.

Naja vielleicht is ja der code nützlich, also hier ist er, auch wenn es net viel ist.

Quellcode:
#include <stdlib.h>
#include <stdio.h>

#include <SDL.h>
#include <SDL_main.h>
#include <SDL_opengl.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glaux.h>



void init()
{
    glViewport(0,0,1,1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);    
    glLoadIdentity();
    //gluPerspective(45.0f,(GLfloat)2/(GLfloat)2, 1 ,150.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();



}

void Paint()
{
    glClearColor(1.0f,1.0f,1.0f,1.0f);
    
    glTranslatef(-1.5f,0.0f,-6.0f);

    glBegin(GL_TRIANGLES);

    glColor3f(1.0f,1.0f,0.0f);
    glVertex3f(0.0f,1.0f,0.0f);
    glVertex3f(-1.0f,-1.0f,0.0f);
    glVertex3f(1.0f,-1.0f,0.0f);

    glEnd();
}








//int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR IpCmdLine, int nShowCmd)
int main()
{
    SDL_Surface *screen;
    int running;

    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        fprintf(stderr, "SDL konnte nicht initialisiert werden: %s\n",
            SDL_GetError());
        exit(1);
    }
    atexit(SDL_Quit);

/* OpenGL-Bildschirmmodus */
    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

    screen = SDL_SetVideoMode(640, 480, 0, SDL_OPENGL);
    if (!screen) {
        fprintf(stderr, "Konnte Bildschirmmodus nicht setzen: %s\n",
            SDL_GetError());
        exit(1);
    }
   init();

/* Programmschleife */
    running = 1;
    while(running)
    {
        
        

        Paint();
        SDL_Event event;

        while(SDL_PollEvent(&event)) {
            switch(event.type) {
            case SDL_KEYDOWN:
                running = 0;
                break;
            case SDL_QUIT:
                running = 0;
                break;
            }
        }

        // Pageflip: Back- und Frontbuffer werden vertauscht
        SDL_GL_SwapBuffers();
    }

        return 0;
}

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
001
17.11.2002, 11:21
Prefect



1. SDL_main.h müßtest du nicht #includen (wird von SDL.h gemacht).
2. Nachdem du SDL_opengl.h includest müßtest du die GL-Header nicht mehr includen (das wird ebenfalls von SDL_opengl.h gemacht).
3. Probier mal, die Standardform von main() zu verwenden, also:
int main(int argc, char **argv)

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
002
17.11.2002, 11:29
snoopdog



hmm jo jetzt geht es, danke. Aber kannst du mir mal kurz erklären, warum man die Parameter mit setzen muss?

Ahh und dann noch etwas: Ich fülle ja den screen mit schwarz. so wen nich aber nun das Fenster hin und herschiebe, dann ist ab und zu rechts mal nen größerer grüner Balken und mal nen kleinerer. Warum??

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
003
17.11.2002, 11:48
apfelkorn



öhm... ihr müsst eigentlich SDL_main benutzen und nicht das normale main, denn meines wissens wird die normale mainfunktion durch sdl überritten...

--

zum Seitenanfang zum Seitenende Profil || Suche
004
17.11.2002, 13:30
Mazze



Ich nehm die normale und es geht...

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
005
17.11.2002, 17:54
Prefect



Also, tauchen wir hinab in die Gründe von SDL_main...

Auf manchen Plattformen führt SDL vor der Ausführung des eigentlichen Programms ein paar Initialisierungen durch, auf Windows wird z.B. stdout und stderr in Dateien umgeleitet. Der Code, der diese Initialisierungen durchführt, befindet sich in der SDLmain.lib, und in der SDLmain.lib ist auch die Funktion main(int, char**) deklariert. Diese main()-Funktion ruft dann eine Funktion SDL_main(int, char**) auf.

Deswegen muß die main-Funktion im eigentlichen Programm SDL_main heißen. Der Clou ist aber, daß SDL.h die SDL_main.h #include-t, und in der SDL_main.h findet man die Zeile

Quellcode:
#define main SDL_main

Klar, oder? Dadurch wird die main-Funktion insgeheim umbenannt.

snoopdogs Problem hatte jetzt mit C++ und Funktionsüberladungen zu tun. In C++ ist es möglich, mehrere Funktionen mit dem gleichen Namen zu haben, wenn sie verschiedene Parameter tragen. Deswegen kommt es auch zum sogenannten Namemangling, bei dem aus der Funktion SDL_main sowas gemacht wird wie SDL_main@ivvc oder so, je nach Compiler. Anhand dieser Anhängsel können überladene Funktionen vom Linker unterschieden werden.

Allerdings erwartet die SDLmain.lib, die in reinem C geschrieben ist, daß die Funktion SDL_main einfach nur SDL_main heißt (bzw. _SDL_main, der C-Compiler fügt vorne einen Unterstrich an aber sonst nichts) und keine Anhängsel hat.
Deswegen findet sich in SDL_main.h folgende Zeile, wenn sie von einem C++-Compiler bearbeitet wird (in Wirklichkeit spielen noch ein paar Präprozessormakros eine Rolle):

Quellcode:
extern "C" int SDL_main(int argc, char *argv[]);

Diese Zeile sagt dem Compiler, daß er für die SDL_main kein Namemangling durchführen soll. Allerdings scheint der C++-Compiler in deinem Fall etwas beschränkt gewesen zu sein, denn er hat sich nur gemerkt, daß eine Funktion namens SDL_main mit den zwei angegebenen Parametern (int, char**) wie eine C-Funktion behandelt werden soll. Die Funktion SDL_main ohne Parameter hat er nach wie vor wie eine C++-Funktion behandelt.
Nachdem SDL_main jetzt die vom Standard vorgegeben Parameter hat erkennt der Compiler, daß er sie wie eine C-Funktion behandeln soll und alle sind happy.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
006
20.11.2002, 10:55
King of Darkness



ich bin imemr wieder erstaunt von dir, perfect
woher weist du das alles (sag bitte nicht gelernt das kann ich mir denken)
und wie alt bist du nach deinem wissen würde ich sagen so 25
kannst du mir vieleicht etwas wie ne schulung geben in opengl und sdl

ok gehört jetz nich zu thread

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
007
03.12.2002, 09:37
Kriz



Hehehe, 25... Mach den Prefi nicht älter, da bekommt er sonst graue Haare von >;)

Der Kerl beschäftigt sich halt seit vielen Jahren mit Computern usw. Da kommt sowas automatisch...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
008
04.12.2002, 10:50
mg



Studiert Prefect Informatik/Programmierung oder bringt er sich das ganze selbst per Bücher/Tutorials bei?

btw: er ist nicht Perfect... er ist Prefect.

--


Dieser Beitrag wurde am 04.12.2002 um 10:50 von mg bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
04.12.2002, 14:11
King of Darkness



naja und wie alt is er nun ?

und das von mg würde mich auch interessiern

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
010
04.12.2002, 14:33
Prefect



Ich bin 18 und schreibe nächstes Jahr Abitur.
Wirklich gelernt habe ich das Programmieren eigentlich, indem ich mir sehr, sehr viel Zeit genommen habe und sehr viel Sourcecode gelesen habe. Wichtig dabei war natürlich, daß ich versucht habe, den Sourcecode auch wirklich zu _verstehen_, und daß ich all das wirklich machen wollte.
Bücher und Tutorials waren natürlich auch hilfreich, meistens aber eher als schnelle Referenz.

Am wichtigsten war aber wahrscheinlich, daß ich eben _keinen_, oder nur sehr eingeschränkten Zugang zu Informationen hatte (ganz besonders: kein Internet). Dadurch wurde das Verstehen von bestimmten Dingen immer zu einer Art Ratespiel, zum Teil mit Ausprobieren verbunden. Z.B. habe ich ohne jegliche Dokumentation herausgefunden, wie man den Maustreiber unter DOS mit Assembler anspricht, indem ich ein kleines Testprogramm in Pascal geschrieben und dann disassembliert habe (mit dem alten DOS-Debugger, wohlgemerkt *g*).

Wer Computer und Programmierung so wie ich verstehen lernen will muß dazu vor der Grundschule anfangen, eine Hackermentalität und kein Internet, dafür aber sehr viel Durchhaltevermögen (was eigentlich zur Hackermentalität dazugehört) haben - und in Kauf nehmen, daß fast niemand wirklich versteht, was man da eigentlich macht.
Das heißt natürlich nicht, daß man auch ohne diesen etwas extremen Einsatz das entsprechende Wissen erwerben kann. Man muß es sich nur eben anders erwerben.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.


Dieser Beitrag wurde am 04.12.2002 um 14:40 von Prefect bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
04.12.2002, 15:27
King of Darkness



hui, ich habe zwar auch vor der grundschule schon kontakt mit pcs gehabt aber da waren es eher die spiele ...

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
012
04.12.2002, 16:38
Kriz



Viele "Schicksale" ähneln sich da. Meines war auch nicht sehr viel anders als das von Prefect. Angefangen hat alles mit dem C64, wo ich bereits nach sehr kurzer Zeit mich mit dem C64 BASIC auseinandergesetzt habe. Auch zu diesem Zeitpunkt hatte ich kein Internet. Meine Quellen war ein fettes C64 Programmierhandbuch für BASIC und gelegentliche Blicke in solche berühmten Magazine wie C64er oder Input64 (Diskmagazin).

Danach kam der Amiga500, bei dem ich um's Verrecken (!!!) keinen C-Compiler auftreiben konnte (waren alle irgendwie immer ausverkauft und meine zocksüchtigen Kumpels hatten von Programmieren soviel Ahnung wie ne Kuh vom Tauchen). Daher arbeitete ich dort auch eher mit dem Amiga-BASIC, auch wenn ich vom Wunder "C" schon viel gehört hatte und ich geil drauf war, diese Sprache endlich mal aktiv kennenlernen zu können.

Danach gab es einen Abstecher nach Q-BASIC im EDV-Kurs auf der Gesamtschule, der aber nicht viel eingebracht hatte.

Auf dem Gymi gab's dann endlich mal was "Anständiges" in Form von TurboPascal, was ein Umdenken seitens der Programmstrukturierung bei mir erforderte. Ich nannte Pascal früher immer "C für Arme", da es zwar beinahe wie C aufgebaut war, aber irgendwie nur dünnschissiges Gerümpel bei rumgekommen war.

Als ich dann mit dem Studium begonnen hatte, kaufte ich mir gleich einen PC (133er MMX), um ENDLICH (!!!) C aktiv erforschen zu können mittels dem alten Borland C-Compiler unter DOS. Bis dato hatte ich immer noch kein Inet, mußte also alles aus Büchern, Vorlesungen und Gedankenaustauschen herbeisaugen.

Später kam dann C++ als Fach vor und ich kaufte mir VC++ 6.0 als Plattform. Das war irgendwie leichter zu editieren als auf den ollen Sparcs, da die Hampelmänner von der Admi und Support auf der FH bis dato kein KDevelop installiert hatten und EMACS/Vi mir die Haare zu Berge stehen ließen (hehehe). Erst nachdem das frühe KDE mit dem KWrite installiert worden war, konnte ich gcc so richtig quälen >:)

Dort auch konnte ich erstmals über das Inet Infos über C, C++ und Assembler saugen, die ich mir noch auf Diskette kopiert und daheim zerpflückt hatte.

Und erst nachdem ich Inet beantragt hatte (damals noch mit nem 56kflex ALDI-Modem und Internet-By-Call Zugang), erschlossen sich völlig neue Quellen für mich, die praktisch immer zugreifbar waren und meine mittlerweile beachtliche Sammlung an Skripten, Büchern, Tuts und losen Blättern/Kopien um einiges erweitert hatte.

ISDN und DSL sorgten für mehr Späßchen. Aber im Kern habe ich auch nur aus wenigen Quellen alles rauspopeln müssen, da ich fast 85% meiner Computerzeit kein Inet besessen habe bzw. kein Zugriff aufs Inet hatte.

Tja, so ist das...

=)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
013
05.12.2002, 08:00
King of Darkness



boh ...

bei mir war ja eher der drang nach proggen einige zeit später, so vor 1 1/2 bis 2 jahren, dementsprechend kann ich auch nich so viel

aber wie kommt man darauf mit 7 8 oder 9 jahren sich da hin zu setzen und zu sagen jetz lern ich proggen, da hat man doch andere sachen im kopf, nämlich zocken, seis am pc, c64 oder amiga oder einfach nur mit kleinen legobausteinen

was mich aber auch interessieren würde, kommt es spontan das ihr da sagt jetz will ich mal netzwerk code lernen oder legt ihr euch da ziele ?

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
014
05.12.2002, 09:39
mg



ich hab auch nen c64. Ich hatte da so viele Games, dass ich nie auf die Idee gekommen wäre, proggen zu lernen.
Wieviel Zeit pro Tag habt ihr denn durchschnittlich dafür geopfert?

--

zum Seitenanfang zum Seitenende Profil || Suche
015
05.12.2002, 09:43
King of Darkness



24 stunden HÖHÖ

naja bei mir war es wie bei dir, da gabs nur games, games und nochmal games

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
016
05.12.2002, 11:30
mg



Zitat:
...da gabs nur games, games und nochmal games...

hört sich brutal an, kommt der Wahrheit aber wahrscheinlich am nächsten.

Ich hab von nem Buch mal ein Stück Code abgetippt. Es waren zwar nur ein paar Zeilen, aber damals für meine dürftige Schreibgeschwindigkeit doch n ganzes Stück Arbeit. Als das dann nicht gefunzt hat, war ich so verärgert, dass ich nichts mehr davon wissen wollte.
hatte auch erst 5oda6 Jahre aufm Buckl.

--

zum Seitenanfang zum Seitenende Profil || Suche
017
05.12.2002, 11:57
King of Darkness



lol 5 oder 6 jahre aufm BUCKL wie ds klingt wie so ein altes viech was da noch so rumkreucht und fleucht ;)

das erstemal so richtig kontakt mit quellcode (um genau zu sein mit Q-Basic) war so mit 7 oder 8, das war aber noch nich so mein ding, und eben mit proggen angefangen habe ich mit 14 bis 15 (gerademal fast 2 jahre her), ich hatte mir da in den kopf gesetz das ich später spiele proggen will (was ich ja heute versuch mit einer HL mod) wuste aber nich welche sprache da wohl am besten sein wird, bis ich dann so mal richtig gehört hatte das es da n nette sprche gibt (c/c++) (das war dann so wo ich trölf war( also zwischen 11 12 und 13) hatte da aber noch nix mit i-net am hut also war es schwer an einen compiler gescheige denn an tuts oder quellcode zu kommen, dann habe ich halt gesagt ich auf mich ein buch und habe es mir mal rein gezogen und dann habe ich eben angefangen etwas mit dem code rum zu spielen (noch alles im dos modus also noch nix windoof proggs) und naja, dann is es nach und nach komplexer und teilweise unverständlich geworden, naja aber einiges habe ich dann doch noch verstanden, und nun sitze ich hier auf arbeit und schreibe SAP proggies (mit abap) aber naja ich mach ja immernoch c/c++ und ich hoffe das ich noch dieses jahr dazu komme mit opengl anzufangen, um eben meinem ziel zu folgen (spiele proggen) bis das aber soweit ist wird sicherlich noch ein oder 2 jahre vergehen (muss ja erstmal opengl begreifen ;) )

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
018
05.12.2002, 14:33
apfelkorn



mh... angefangen habe ich mit programieren auf dem 286 meines Vaters mit GWBasic und habe dort meine ersten Spielchen geschrieben (Wettlauf - "Wie lautet der Vorname von Abe Lincoln?") und nun bin ich mit c am rumexperimentieren schon seit etwas mehr als 3 Jahren

--


Dieser Beitrag wurde am 05.12.2002 um 14:33 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
019
05.12.2002, 14:55
Prefect



King of Darkness: Wenn der Computer gleich nach dem Anschalten ein ROM-BASIC lädt und die einzigen Disketten die man hat CP/M und ein paar andere Tools wie WordStar (?), Logo (das habe ich schon damals eher gemieden *g*) und Turbo Pascal enthalten dann sucht sich der Spieltrieb eben im Programmieren seinen Lauf ;p
Im Endeffekt ist das auch nicht viel anders als eigene Legomodelle zu bauen.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
020
05.12.2002, 15:08
King of Darkness



stimmt ich sass vor nem atari und konnte noch nichmal lesen geschweige denn schreiben und spiele gabs da haufenweise, von dem her ...

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
021
07.12.2002, 08:05
mg



Meine Frage hab ich nicht spaßhalber gestellt. :)
Wie lange pro Tag/ wieviele Tage pro Woche? Wielviele Jahre?
Irgendwie muss ich mir ja ein Zeitlimit setzen...
Lernt ihr heute auch noch viel dazu(bezieht sich speziell auf c++)?
Welche Sprachen verwendet ihr noch zur Zeit?

--


Dieser Beitrag wurde am 07.12.2002 um 09:23 von mg bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
022
07.12.2002, 12:38
apfelkorn



man lernt immer neue Algorithmen, schreibt sie sich aber zum Teil auch selber.

Das ist auch der ganze Sinn und Zweck der Informatik an der Uni:
Wie entwickle ich effiziente und schnelle Algorithmen die wenig Ressourcen verbrauchen. Alles andere und alles drumherum ist nur was für Erstsemester und Fachhochschüler.

erm... ich verschwende zur Zeit in der Schule Delphi und Privat bin ich mit C ( im moment weniger C++) zugange, allerdings verbringe ich den Hauptteil meiner Zeit im Moment mit dem Erlernen von Theorie zu Yacc und Lex und wollte mir demnächst noch das Buch von Nikolaus Wirth "Compilerbau" kaufen.

--


Dieser Beitrag wurde am 07.12.2002 um 12:40 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche