Gå til innhold

trenger litt clanlib/library hjelp


Anbefalte innlegg

Hei!

 

jeg er ganske ny i c++ men vil prøve ut å lage et 2D spill med hjelp av clanlib.

det jeg har problemer med er å finne ut hva man skal gjøre etter man har lastet ned alt til man ska bruge d i c++.

jeg har lastet clanlib, libjpeg, libpng og zlib og prøvd meg videre men forstår ikke helt det me libary tror jeg.

 

 

håper noen kan hjelpe:)¨

 

 

mvh Mats

Lenke til kommentar
Videoannonse
Annonse

C++ har et linker steg, det som skjer er at når selve programmet er kompilert, så kan det ha masse tomme plasser som blir allokert av header filene, f.eks. en funksjon, en variabel etc.

Deretter startes linkeren, denne fletter inn verdier fra biblioteker inn i de tomme plassene.

 

Derfor må du inkludere headerene til bibliotekene du skal inkludere i programmet dit med #include preprocessor directive. Det denne gjør er rett og slett kopiere innholdet i filen rett inn i et stort tekstdokument, som så kompileres til et eller annet objektformat (COFF, UMF etc.) deretter startes linkeren når all koden er kompilert.

 

Så det du gjør, er at du legger til i compileren sin commandline (eller i IDE hvis du bruker det) alle biblioteken du skal bruke, hvis ikke vil du få en "unresolved external symbol" feil, fordi plassene fortsatt er tomme.

 

Ofte er det smart å ha én fil som inkluderer resten av header filene. I MSVC++ kan du bruke precompiled headers (stdafx.h) for dette.

Lenke til kommentar

hmm, har problemer med en kode her, noen som kan hjelpe?

jeg er veldi nybegynner så er kansje en veldi enkel feil jeg ikke ser :thumbdown:

 

feilen:

 

Compiling...

ClanLibTest.cpp

Linking...

ClanLibTest.obj : error LNK2019: unresolved external symbol "public: __thiscall cClanLibApp::cClanLibApp(void)" (??0cClanLibApp@@QAE@XZ) referenced in function "void __cdecl `dynamic initializer for 'app''(void)" (??__Eapp@@YAXXZ)

ClanLibTest.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall cClanLibApp::~cClanLibApp(void)" (??1cClanLibApp@@UAE@XZ) referenced in function "void __cdecl `dynamic atexit destructor for 'app''(void)" (??__Fapp@@YAXXZ)

C:\Users\Mats\Desktop\hmm\ClanLibTest\Debug\ClanLibTest.exe : fatal error LNK1120: 2 unresolved externals

 

koden:

 

 

// ClanLibTest.cpp : Defines the entry point for the console application.

//

 

#include "stdafx.h"

#include <ClanLib/core.h>

#include <ClanLib/display.h>

#include <ClanLib/gl.h>

#include <ClanLib/application.h>

 

//main app class

class cClanLibApp : public CL_ClanApplication {

 

public:

cClanLibApp();

~cClanLibApp();

 

virtual int main(int, char **);

 

}app;

 

int _tmain(int argc, _TCHAR* argv[])

{

return 0;

}

 

 

 

 

 

Mvh Mats

Lenke til kommentar

Grunnen er at du ikke har definert noen kode i cClanLibApp() og ~cClanLibApp()

 

enten fjern constructoren og destructoren, eller skriv funksjonene.

 

Grunnen til at den klager, er fordi du definerer en variabel (app) som bruker denne, og når den blir allokert på stack(altså ikke en peker), blir constructoren og destructoren kalt, og da tryner det fordi det ikke er skrevet noe kode for dem.

 

edit: dette er en feilmelding du sannsynligvis kommer over senere:

når det står "Unresolved external reference" så er det enten fordi man har glemt å inkludere en .lib fil, eller ikke har skrevet funksjonen enda.

Endret av GeirGrusom
Lenke til kommentar

:hmm: da er det nok noe med en .lib fil...hadde jeg bare viste hvilken å hvordan jeg skal fikse, hehe.

 

trenger clanlib noen directx sdk eller lignene for å fungere?

 

hvilken compiler/IDE anbefaler du meg å bruke for å lage .lib filene? så enkelt som mulig helst :)

Lenke til kommentar

class cClanLibApp : public CL_ClanApplication {

public:
cClanLibApp()
{

}
~cClanLibApp()
{
}

virtual int main(int, char **);

}app;

Sånn! da lar det seg nok kompilere.

 

Lib filer ligger med clanlib i "lib" mappen.

Nå har ikke jeg testet clanlib før, men det er vanlig at det er sånn.

 

Jeg bruker Visual C++ vanligvis.

For å inkludere biblioteker, må du åpne egenskaper på C++ prosjektet (ikke solution) og bla frem Linker->General->Addiotional Library Directories

Her legger du til mappen til Clanlib\lib mappen

deretter blar du frem Linker->Additional Dependencies, og skriver f.eks. clanlib.lib (hvis det er det den heter)

Lenke til kommentar

thanks:)

 

men har en mistanke om at jeg ikke gjør riktig når jeg legge inn library, noen som har en link eller noe til en basic guide til å legge til library i visual c++?

 

en annen ting jeg lurer på er, hvor er d ikke bare en install fil som jør dette helt automatisk slik at alt er klar til bruk med en gang? :hmm:

Endret av matsalex
Lenke til kommentar

Fordi du driver med programmering, og da er det egentlig forventet at du vet hvordan det fungerer.

Du vil ikke synes det er så vanskelig når du vet hvordan det gjøres.

 

 

Først må du legge til mappen som include filene ligger i (hvis ikke de ligger i standard mappene, PlatformSDK\lib, eller bare lib mappen i Visual C++

Dette gjøres i egenskapene til prosjektet

Linker->General->Additional Library Directories

Deretter legger du til lib filene i

Linker->Input->Additional Dependencies

f.eks.

OpenGL32.lib glut32.lib

etc.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...