Avatar billede Swift Praktikant
10. september 2003 - 09:05 Der er 7 kommentarer og
1 løsning

C++ kompilering på redhat - hvordan inkluderes undermapper

Jeg prøver at kompilere et simpelt program på en redhat.
Det består at følgende 3 filer:
/home/me/test.cpp
/home/me/modul/ting.cpp
/home/me/modul/ting.hpp

Jeg har prøvet at kompilere på disse måder:
c++ *.cpp -L /usr/lib/librrd.a -lrrd -o mitprogram
c++ *.cpp -I modul -L /usr/lib/librrd.a -lrrd -o mitprogram
c++ *.cpp -I /home/me/modul -L /usr/lib/librrd.a -lrrd -o mitprogram

INGEN af ovenstående virker...
Fejlene fra kompileren: "undefined reference to ...."

Hvad er det lige der går galt ??

PS:
Det skal lige siges - at hvis jeg kopierer de to filer fra modul mappen til samme sted som test.cpp så virker det!!
Og ja - jeg har skrevet '#include "modul/ting.hpp"' i test.cpp
Avatar billede soreno Praktikant
10. september 2003 - 09:07 #1
Du skal også kompilere "modul/ting.hpp", den objekt fil du får ud af det skal du linke med main.
Avatar billede soreno Praktikant
10. september 2003 - 09:09 #2
Der skulle stå "modul/ting.cpp"..
Avatar billede soreno Praktikant
10. september 2003 - 09:11 #3
Du kan muligvis også undgå problemet ved at kopiere indholdet af ting.cpp ind i ting.hpp - men det er ikke en særlig køn løsning..
Avatar billede arne_v Ekspert
10. september 2003 - 09:33 #4
cd modul
c++ -c ting.cpp -o ting.o
cd ..
c++ -c -Imodul test.cpp -o test.o
c++ test.o modul/ting.o /usr/lib/librrd.a -o mitprogram
Avatar billede arne_v Ekspert
10. september 2003 - 09:33 #5
Den sidste kan muligvis erstattes af:

c++ -lrrd test.o modul/ting.o -o mitprogram
Avatar billede Swift Praktikant
10. september 2003 - 09:54 #6
Hm...
Er der ikke en løsning ala
C++ *.cpp /include-sub-dirs

(hvis man nu har 50 moduler)

Eller kan man lave en dynamisk makefil - der tager alle undermapper med?

;-)
Avatar billede arne_v Ekspert
10. september 2003 - 10:35 #7
Jeg tror at gængs praksis er at have en makefile i hver dir.
Og så lade hoved makefile kalde alle makefiles.
Avatar billede olennert Nybegynder
10. september 2003 - 16:11 #8
swift>

arne_v har ret. Først oversætter du dine .cpp filer til .o filer, bagefter linker du. Og når du linker, så vil -L option fortælle *hvor* dit library ligger, -l hvilket du vil linke med. Så i stedet for Arnes sidste linie
c++ test.o modul/ting.o /usr/lib/librrd.a -o mitprogram, så kan du altså også bruge
c++ test.o modul/ting.o -L/usr/lib -lrrd -o mitprogram

Og ja, gængs praksis er at have en makefile i hver dir. Hvis du vil kigge på dynamisk makefile, så kig på GNU automake og autoconf.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis