Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: "undefined reference" g++:lla

Sivun loppuun

Tampio [06.01.2007 19:02:04]

#

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?

tgunner [06.01.2007 19:11:41]

#

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?

Metabolix [06.01.2007 19:30:51]

#

Ja jos käytät sen piirto.cpp:n funktioita, niin sekin pitää kääntää tuossa mukana (eli sekin tuohon samaan komentoon mukaan).

tgunner [06.01.2007 19:37:15]

#

Voi voi, en lukenutkaan kuin puolet Tampion viestistä. Kyllä sinun pitää ottaa kääntöön mukaan tuo piirto.cpp-tiedostokin, kuten Metabolix yllä mainitsikin.

Tampio [06.01.2007 20:07:44]

#

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.

Metabolix [06.01.2007 20:30:30]

#

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

Tampio [06.01.2007 20:47:36]

#

Noniin. Tuosta piirto.cpp:stä oli jäänyt #include <SDL/SDL.h> pois. Noh, ei sitä kaikkea voi aina huomata. Kiitoksia vain neuvoista.

Heikki [06.01.2007 21:14:45]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta