SDL:ää tässä koittaisin testailla ja tuli ongelma. Samassa kansiossa on kolme tiedostoa: pääohjelma testi.cpp, otsikkotiedosto testi.h ja funktio piirto.cpp. Nyt kun g++:lla koitan kääntää ohjelmaa näin: "g++ -o testi testi.cpp -lSDL", niin se herjaa että "undefined reference to `funktion nimi tähän'
collect2: ld returned 1 exit status".
Puuttuuko kenties tuosta g++ rivistä jotain oleellista vai missä vika?
Käännä näin: g++ -o testi.exe testi.cpp -lmingw32 -lsdlmain -lsdl. Jos tuo ei toimi, niin kerro meille, että onko kyseessä joku oma funktiosi vai SDL:n?
Ja jos käytät sen piirto.cpp:n funktioita, niin sekin pitää kääntää tuossa mukana (eli sekin tuohon samaan komentoon mukaan).
Voi voi, en lukenutkaan kuin puolet Tampion viestistä. Kyllä sinun pitää ottaa kääntöön mukaan tuo piirto.cpp-tiedostokin, kuten Metabolix yllä mainitsikin.
Niin siis linuxilla olen nyt liikenteessä ja funktio josta se herjasi oli ihan oma, joka on tuossa piirto.cpp:ssä.
Koko systeemi toimi ihan hyvin kun kaikki oli samassa tiedostossa ja käänsin sen, mutta sitten laitoin tuon funktion ja sen esittelyn omiin tiedostoihinsa niin sitten ei taidot enää riittänyt.
Juu, eli jos vielä jäi epäselväksi, niin
/* piirto.h */ extern int funktio(int a);
/* piirto.cpp */ #include "piirto.h" int funktio(int a) { return a; }
/* testi.cpp */ #include "piirto.h"
Ja kääntäminen:
g++ testi.cpp piirto.cpp -o testi -lSDL
Noniin. Tuosta piirto.cpp:stä oli jäänyt #include <SDL/SDL.h> pois. Noh, ei sitä kaikkea voi aina huomata. Kiitoksia vain neuvoista.
Kun projektiin eksyy useampia tiedostoa, saat yksinkertaistettua käännösprosessia tekemällä yksinkertaisen Makefilen. Tämän jälkeen komento make kääntää ohjelmasi (eikä käännä uudestaan tiedostoja, jotka eivät ole muuttuneet), ohjeet suomeksi: http://linux.fi/index.php/Makefile
Aihe on jo aika vanha, joten et voi enää vastata siihen.