Toon posts:

Meerdere files compileren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik hoop dat dit het juiste forum is :) Ik wil een programma compileren op linux, voor een practicum, maar het gaat niet helemaal goed :) Ik heb er ook niet echt ervaring mee, dus als iemand me kan helpen ..

Er zijn zes files in dezelfde directory: scan.cpp, scan.h, mipmap.cpp, mipmap.h, paint.cpp en paint.h. Het programma paint gebruikt functies uit scan en mipmap.

Ik doe nu
code:
1
`gcc -I/usr/X11R6/include -I/usr/X11R6/include/GL -I/home/arvind/download/software/in2770/Opgave_1 -o paint -L/usr/X11R6/lib -L/home/arvind/download/software/in2770/Opgave_1 paint.cpp -lX11 -lXi -lXmu -lglut -lGL -lGLU -lm`


en dan krijg ik de foutmelding

/tmp/ccsfdOP8.o(.text+0x13): In function `texturemap(Point*, Point*, MipMap*)':
: undefined reference to `Scan(Point*, Point*, MipMap*)'
/tmp/ccsfdOP8.o(.text+0x323): In function `myinit()':
: undefined reference to `MipMap::MipMap[in-charge]()'
/tmp/ccsfdOP8.o(.text+0x371): In function `myinit()':
: undefined reference to `MipMap::Load(char const*)'
collect2: ld returned 1 exit status

Ik denk dat die mipmap en scan niet gevonden worden door de linker, maar waarom niet?

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Voor dit soort dingen hebben ze makefiles bedacht, kan je heel mooi de dependency aangeven :)

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Je geeft op je commandline niet aan dat hij de objectfiles of sourcefiles van mipmap ook mee moet nemen, niet zo gek toch dat ie ze niet kan vinden (let er op dat het niet zoals bij java gaat: "oh, class/functie X heeft Y nodig, eens kijken of ik die in een bestandje kan vinden ergens", maar dat je meer expliciet moet opgeven als je het in 1 stap wil compilen) :)
Ik sluit me ook aan bij Erkens, als je programmeersel een bepaalde grootte overstijgen (en blijkbaar zit je net over die grens) kan het lonen dergelijke dingen netjes op te lossen ipv "gcc -o *.c -o prog" and hope for the best :)
Overigens suggeren je bestandsnamen C++, mag ik vragen waarom je dan niet met g++ compileert? :)

[ Voor 19% gewijzigd door blaataaps op 17-11-2005 13:30 ]


Verwijderd

Topicstarter
blaataaps schreef op donderdag 17 november 2005 @ 13:28:
(let er op dat het niet zoals bij java gaat: "oh, class/functie X heeft Y nodig, eens kijken of ik die in een bestandje kan vinden ergens", maar dat je meer expliciet moet opgeven als je het in 1 stap wil compilen) :)
Aha! Dat had ik namelijk wel verwacht :)
Ik sluit me ook aan bij Erkens, als je programmeersel een bepaalde grootte overstijgen (en blijkbaar zit je net over die grens) kan het lonen dergelijke dingen netjes op te lossen ipv "gcc -o *.c -o prog" and hope for the best :)
Overigens suggeren je bestandsnamen C++, mag ik vragen waarom je dan niet met g++ compileert? :)
Ik was begonnen met een makefile maar daar heb ik ook geen ervaring mee dus toen dat niet werkte ben ik 't maar op de commandline gaan proberen ... en 't moet idd g++ zijn ;) Bedankt!

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
Make is inderdaad de meest gebruikte voor dit doel. Op freshmeat staat een overzicht met een aantal alternatieven.

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 01:14
g++ -I/blablabla -c *.cpp
g++ -o paint *.o

Zou voldoende moeten zijn. Overigens lijkt het me beter om ff een howto over autotools te bekijken, als je dat eenmaal doorhebt heb je aan een regel in Makefile.am genoeg :P

  • frim
  • Registratie: Augustus 2001
  • Niet online
Of, als je het simpel wilt houden en het alleen voor het testen is, kun je ccbuild eens proberen. Als je je aan de paar regels houdt, kun je vervolgens door alleen "ccbuild" in te tikken je volledige programma compileren.

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05-2025
_JGC_ schreef op vrijdag 18 november 2005 @ 10:51:
g++ -I/blablabla -c *.cpp
g++ -o paint *.o

Zou voldoende moeten zijn. Overigens lijkt het me beter om ff een howto over autotools te bekijken, als je dat eenmaal doorhebt heb je aan een regel in Makefile.am genoeg :P
Maar dan ben je inmiddels wel grijs. configure, Makefile, Makefile.in, Makefile.am, configure.in, autogen.sh. Er zijn zo veel files die gebruikt worden om andere files te genereren die weer gebruikt worden om weer andere files te genereren. Dat is de reden dat er alternatieven op de markt komen.

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 28-01 19:27

leuk_he

1. Controleer de kabel!

_JGC_ schreef op vrijdag 18 november 2005 @ 10:51:
g++ -I/blablabla -c *.cpp
g++ -o paint *.o

Zou voldoende moeten zijn.
bijna.
g++ -I/blablabla -c *.cpp
^ inderdaad alle Include valggetjes
g++ -o paint *.o -Lblablalib
^alle Link vlaggetjes.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.

Pagina: 1