Kirjoittaja Aihe: C++ ja SDL ongelma(ratkaistu)  (Luettu 3189 kertaa)

J-P

  • Käyttäjä
  • Viestejä: 52
    • Profiili
C++ ja SDL ongelma(ratkaistu)
« : 10.06.08 - klo:10.50 »
Asensin LibSDL1.2dev paketin, ja yritin kääntää ohjelmaa komentoriviltä:
Koodia: [Valitse]
$ g++ -o SDLTesti SDLTesti.cpp -lSDL
Mutta kääntäjä herjaa:
Koodia: [Valitse]
SDLTesti.cpp:1:63: error: SDL\SDL: No such file or directory
SDLTesti.cpp: In function ‘int main(int, char**)’:
SDLTesti.cpp:7: error: ‘SDL_INIT_VIDEO’ was not declared in this scope
SDLTesti.cpp:7: error: ‘SDL_Init’ was not declared in this scope
SDLTesti.cpp:9: error: ‘stderr’ was not declared in this scope
SDLTesti.cpp:9: error: ‘SDL_GetError’ was not declared in this scope
SDLTesti.cpp:9: error: ‘fprintf’ was not declared in this scope
SDLTesti.cpp:15: error: ‘SDL_Surface’ was not declared in this scope
SDLTesti.cpp:15: error: ‘naytto’ was not declared in this scope
SDLTesti.cpp:22: error: ‘SDL_HWSURFACE’ was not declared in this scope
SDLTesti.cpp:22: error: ‘SDL_FULLSCREEN’ was not declared in this scope
SDLTesti.cpp:22: error: ‘SDL_SetVideoMode’ was not declared in this scope
SDLTesti.cpp:27: error: ‘SDL_Delay’ was not declared in this scope
SDLTesti.cpp:29: error: ‘SDL_Quit’ was not declared in this scope

Mitä onnistuin mokaamaan?

EDIT:
Koodi (Ohjelmointiputkan oppaasta)
Koodia: [Valitse]
#include <SDL\SDL>  // sisällytetään SDL:n otsikkotiedostot

int main(int argc, char *argv[]) {

    // nyt meidän tulee alustaa SDL. Tämä onnistuu SDL_Init() funktiolla, jolle annetaan parametrina
    // tieto siitä, mitkä SDL:n osat alustetaan, tässä tapauksessa vain video-ominaisuudet
    if( SDL_Init(SDL_INIT_VIDEO) < 0 )  // paluuarvon ollessa pienempi kuin 0, tapahtui virhe
    {
        fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError()); // virheestä tiedot tiedostoon
        return 0; // lopetetaan ohjelma
    }

    // SDL on nyt alustettu virheettömästi, seuraavaksi onkin aika vaihtaa resoluutiota
    // ensin on kuitenkin luotava pinta, joka kattaa näytön sisällön:
    SDL_Surface * naytto;
    // SDL_Surface on siis SDL:n oma tyyppi, jota käytetään eri pintoja varten, tästä lisää myöhemmin

    // sitten resoluution vaihtaminen. SDL_SetVideoMode-funktio vaihtaa resoluution
    // parametreina sille annetaan uusi resoluutio, värisyvyys (tässä 32-bittinen) ja sitten ohjausliput
    // tässä tapauksessa ohjausliput tarkoittavat, että pinta luodaan näytönohjaimen muistiin ja
    // ohjelma asetetaan kokoruututilaan (katso taulukko lopusta)
    naytto = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE|SDL_FULLSCREEN);
   
    // peli tähän :D

    // odotetaan 5 sekuntia
    SDL_Delay(5000);

    SDL_Quit(); // "suljetaan" SDL
    return 0;
}
« Viimeksi muokattu: 11.06.08 - klo:20.40 kirjoittanut J-P »

mgronber

  • Käyttäjä
  • Viestejä: 1458
    • Profiili
Vs: C++ ja SDL ongelma
« Vastaus #1 : 10.06.08 - klo:10.55 »
Koodia: [Valitse]
SDLTesti.cpp:1:63: error: SDL\SDL: No such file or directory

Ainakin tuolla pitäisi olla kauttaviiva kenoviivan sijasta.

J-P

  • Käyttäjä
  • Viestejä: 52
    • Profiili
Vs: C++ ja SDL ongelma
« Vastaus #2 : 10.06.08 - klo:11.20 »
Vaihdoin includen polun kauttaviivaksi, niin tuli samat herjat paitsi kenoviiva oli kauttaviiva.

Tuxer

  • Käyttäjä
  • Viestejä: 657
  • Debian 7.0, Sailfish
    • Profiili
    • opendimension.org
Vs: C++ ja SDL ongelma
« Vastaus #3 : 10.06.08 - klo:12.13 »
Minulla kääntyi kun lisäsi .h:n

Koodia: [Valitse]
#include <SDL/SDL.h>
EDIT: käsittääkseni tuo .h jätetään pois vain C++:n standardikirjastoista?
« Viimeksi muokattu: 10.06.08 - klo:12.24 kirjoittanut Ari Häyrinen »
"Menehän Tonttu Tomera tarkastamaan ollaanko korsuissa kiltisti."
Fingerpori

J-P

  • Käyttäjä
  • Viestejä: 52
    • Profiili
Vs: C++ ja SDL ongelma
« Vastaus #4 : 10.06.08 - klo:14.45 »
Kiitos. Nyt toimii.
Lisää kysymyksiä:
Miten headerit toimivat, jos ne ovat eri kansiossa kuin koodi tai jos ne ovat samassa kansiossa? Kirjoitetaanko silloin vain includeen polku?
« Viimeksi muokattu: 10.06.08 - klo:14.47 kirjoittanut J-P »

Tuxer

  • Käyttäjä
  • Viestejä: 657
  • Debian 7.0, Sailfish
    • Profiili
    • opendimension.org
Vs: C++ ja SDL ongelma
« Vastaus #5 : 10.06.08 - klo:17.04 »
 
Miten headerit toimivat, jos ne ovat eri kansiossa kuin koodi tai jos ne ovat samassa kansiossa? Kirjoitetaanko silloin vain includeen polku?

Kääntäjä etsii ensi siitä työhakemistosta ja jos ei löydy niin sitten include-hakemistosta. Esim. tuo ylläoleva esimerkki etsii ensin ./SDL/SDL.h ja sitten /usr/include/ -hakemistosta.
"Menehän Tonttu Tomera tarkastamaan ollaanko korsuissa kiltisti."
Fingerpori

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: C++ ja SDL ongelma
« Vastaus #6 : 10.06.08 - klo:21.22 »
Kääntäjä etsii ensi siitä työhakemistosta ja jos ei löydy niin sitten include-hakemistosta. Esim. tuo ylläoleva esimerkki etsii ensin ./SDL/SDL.h ja sitten /usr/include/ -hakemistosta.

jos headereita on tarkoitus etsiä ensin hakemistosta jossa käännettävä tiedosto itse on, niin ne on tapana merkitä lainausmerkein:
Koodia: [Valitse]
#include "mun_oma_header.h"
jos taas tarkoitus on löytää headeri include-hakemistosta, niin sillin käytetään jo tuota aiemmin käytettyä tapaa:
Koodia: [Valitse]
#include <jonkun_muun_header.h>
ja noita include-hakemistoja joista noita headereita etsitään, voi määritellä lisää antamalla niitä kääntäjälle parametrina vivun -I avulla.
Janne