Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: J-P - 10.06.08 - klo:10.50

Otsikko: C++ ja SDL ongelma(ratkaistu)
Kirjoitti: J-P - 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;
}
Otsikko: Vs: C++ ja SDL ongelma
Kirjoitti: mgronber - 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.
Otsikko: Vs: C++ ja SDL ongelma
Kirjoitti: J-P - 10.06.08 - klo:11.20
Vaihdoin includen polun kauttaviivaksi, niin tuli samat herjat paitsi kenoviiva oli kauttaviiva.
Otsikko: Vs: C++ ja SDL ongelma
Kirjoitti: Tuxer - 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?
Otsikko: Vs: C++ ja SDL ongelma
Kirjoitti: J-P - 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?
Otsikko: Vs: C++ ja SDL ongelma
Kirjoitti: Tuxer - 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.
Otsikko: Vs: C++ ja SDL ongelma
Kirjoitti: janne - 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.