/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Compilering (hvis det hedder det på dansk)
Fra : Morten Winther


Dato : 29-03-03 18:35

Hej

Hvornår er det lige at man compiler 2 filer til samme eksekverbare fil og
hvornår compiler dem hver for sig?

Jeg fadt ud af ved at bruge makefile i et eksempel at det skulle gøres
sådan:

g++ -Wall -ansi -pedantic -g -o TCPEchoServer TCPEchoServer.cpp
PracticalSocket.cpp

Men hvorfor ikke:

g++ -o TCPEchoServer TCPEchoServer.cpp
g++ -o PracticalSocket PracticalSocket.cpp

Filerne kan hentes her:
http://cs.ecs.baylor.edu/~donahoo/practical/CSockets/practical/


--
/ morten

"There are only 10 types of people in the world: Those who understand
binary, and those who don't"



 
 
Klaus Petersen (29-03-2003)
Kommentar
Fra : Klaus Petersen


Dato : 29-03-03 20:23

> Hvornår er det lige at man compiler 2 filer til samme eksekverbare fil og
> hvornår compiler dem hver for sig?

Tjae.. det er vel smag og behag.

De enkelte filer som du nævner er vel ikke eksekverbare hver for sig - de
virker kun sammen.

Man compiler dem til objekt filer og lænker dem sammen bagefter - så de
referencer de har til hinanden bliver oprettet.

Jeg vil tro at begge dine eksempler ville virke - det eneste der kræves er,
at begge filer er blevet compilet på det tidspunkt hvor du kalder linkeren.



Morten Winther (29-03-2003)
Kommentar
Fra : Morten Winther


Dato : 29-03-03 22:11


"Klaus Petersen" <ng@spectual.ra.bnaa.dk> skrev i en meddelelse
news:b64rqf$pko$1@sunsite.dk...

> Man compiler dem til objekt filer og lænker dem sammen bagefter - så de
> referencer de har til hinanden bliver oprettet.
>
> Jeg vil tro at begge dine eksempler ville virke - det eneste der kræves
er,
> at begge filer er blevet compilet på det tidspunkt hvor du kalder
linkeren.

Hvor kan jeg læse noget om linking på nettet? Der står intet om det i mine
bøger?

/ m



Byrial Jensen (30-03-2003)
Kommentar
Fra : Byrial Jensen


Dato : 30-03-03 00:31

Morten Winther <mail@is.invalid> skrev:
> Hej
>
> Hvornår er det lige at man compiler 2 filer til samme eksekverbare fil og
> hvornår compiler dem hver for sig?

Alle normale C- eller C++-filer (dvs. header-filer undtaget)
oversættes én for én til objekt-filer. Derefter linkes objekt- og
biblioteksfiler til en eksekverbar fil.

> Jeg fadt ud af ved at bruge makefile i et eksempel at det skulle gøres
> sådan:
>
> g++ -Wall -ansi -pedantic -g -o TCPEchoServer TCPEchoServer.cpp
> PracticalSocket.cpp

Her vil ske som beskrevet ovenfor: gcc vil oversætte
TCPEchoServer.cpp og PracticalSocket.cpp til hver sin objektfil, og
derefter kalde en linker til at linke dem sammen med nogle
standard-biblioteker og lave en eksekverbar fil med navnet
TCPEchoServer. Objektfilerne slettes efter brug.

> Men hvorfor ikke:
>
> g++ -o TCPEchoServer TCPEchoServer.cpp
> g++ -o PracticalSocket PracticalSocket.cpp

Det kunne det også næsten være. Den korrekte måde er:

$ g++ -c -o TCPEchoServer.o TCPEchoServer.cpp
$ g++ -c -o PracticalSocket.o PracticalSocket.cpp
$ g++ TCPEchoServer.o PracticalSocket.o -o TCPEchoServer

De 2 første kald laver objektfiler (på grund af -c).
Det sidste kald sørger for linkningen.

Morten Winther (30-03-2003)
Kommentar
Fra : Morten Winther


Dato : 30-03-03 00:35


"Byrial Jensen" <bjensen@nospam.dk> skrev i en meddelelse
news:slrnb8cb8f.11r.bjensen@ask.ask...

> Det kunne det også næsten være. Den korrekte måde er:
>
> $ g++ -c -o TCPEchoServer.o TCPEchoServer.cpp
> $ g++ -c -o PracticalSocket.o PracticalSocket.cpp
> $ g++ TCPEchoServer.o PracticalSocket.o -o TCPEchoServer
>
> De 2 første kald laver objektfiler (på grund af -c).
> Det sidste kald sørger for linkningen.

Tak - det var lige i pap så jeg kunne forstå det.

/ morten



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste