🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #7413

Re: math.h

#7413
From: Dominique Devriese
Date: Tue, 10 Sep 2002 14:42
92 lines
4201 bytes
Gunter Schelfhout writes:

> Dominique Devriese wrote: [knip]
>>
>> je moet linken met "-lm" als optie...  sjuus domi

> Thnx Domi, dat werkt.
> Maar als ge mij ne keer kunt uitleggen waarom de functies uit
> <stdio.h> daar geen probleem van maken zonder '-lm'? 

oops, ja, dat was ik nog van plan.
Er is namelijk een verschil tussen compileren en linken.  Je hebt
misschien gemerkt dat al je files onafhankelijk van elkaar
gecompileerd worden, en daarna pas bij elkaar gelinkt.

Bekijk het volgende voorbeeld:

"
domi: ~/src/test> cat test.c
void a( int b, const char* c );

int main()
{
    a( 4, "appels" );
    return 0;
}
domi: ~/src/test> gcc -pedantic -Wall -c test.c -o test.o
domi: ~/src/test> gcc test.o -o test
test.o: In function `main':
test.o(.text+0x11): undefined reference to `a'
collect2: ld returned 1 exit status
domi: ~/src/test> 
"

Bij het compileren ( als je gcc aanroept met de -c optie ), geeft hij
geen fout, ook al is functie a niet gedefini�erd.  Ze is immers wel
gedeclareerd, zodat de compiler wel weet dat ze bestaat.   Bij het
linken echter, moeten alle functies die je gebruikt ook gedefini�erd
zijn, anders krijg je "undefined reference" fouten.  als je doet:
domi: ~/src/test> cat > a.c << EOF
> void a( int b, const char* c )
> {
>   /*  doe vanalles...  */
> };
> EOF
domi: ~/src/test> gcc -c a.c -o a.o
domi: ~/src/test> gcc a.o test.o -o test
domi: ~/src/test> 

zijn de fouten weg.  A is nu gedefini�erd.  Het verschil met jouw
situatie is dat
1 de functie a gedefini�erd wordt in de gedeelde bibliotheek libm.so,
en je dus moet linken met -lm, in plaats van a.o mee te linken.
2 de functie a gedeclareerd wordt in de header "math.h", die er heel
kort zo zou kunnen uitzien:
"
void a( int, const char* )
"
Deze hoort niet bij jouw programma, maar bij de library libm.so, en je
gebruikt die header om zeker te zijn dat je de functie niet anders
declareert dan ze gedefini�erd is.  Anders zou je ze evengoed zelf
kunnen declareren, zonder enig verschil in betekenis.

Ah ja, nog dit.  die libm.so ( de standaard C math library ) wordt dus
niet gelinkt op hetzelfde tijdstip als dat die a.o zou gelinkt
worden.  Aangezien libm.so een gedeelde library is wordt die telkens
opnieuw gelinkt bij het opstarten, om plaats, geheugen, en onderhoud
te besparen.  Bij het normale linken kijkt hij enkel na of alle
functies die je gebruikt gedefini�erd zijn, maar hij linkt ze nog
niet. 

Voil�, ik hoop dat dat ongeveer duidelijk is.

> BTW. Ik
> gebruik Anjuta om te programmeren, omdat ik de ingebouwde editor zo
> goed vindt (ik gebruik deze dus niet als echte IDE).

allez, kom, tis u vergeven.. :)
Nu nog overstappen op emacs.. ;)

> Hij roept gcc
> aan met 'Wall' en '-g' (en -o uiteraard). Maar geen '-lm'. Ik zal ne
> keer in de instellingen van Anjuta kijken.  

goed idee..

sjuus
domi

-- 
Q:	What do Winnie the Pooh and John the Baptist have in common?
A:	The same middle name.
Technical Details
Message-ID: <87it1dkitd.fsf@pandora.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!sn-xit-08!supernews.com!newsfeed.news2me.com!newsfeed.icl.net!newsfeed.fjserv.net!syros.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <hMmf9.110860$8o4.15639@afrodite.telenet-ops.be> <87sn0ij6cd.fsf@pandora.be> <e1nf9.110879$8o4.15698@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII
X-Google-Thread: fcea4,ab8fd936d97eb880
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2002-09-10 08:29:38 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!sn-xit-08!supernews.com!newsfeed.news2me.com!newsfeed.icl.net!newsfeed.fjserv.net!syros.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
Sender: domi@localhost
Newsgroups: be.comp.programming
Subject: Re: math.h
References: <hMmf9.110860$8o4.15639@afrodite.telenet-ops.be> <87sn0ij6cd.fsf@pandora.be> <e1nf9.110879$8o4.15698@afrodite.telenet-ops.be>
From: Dominique Devriese <fritmebufstek@pandora.be>
Message-ID: <87it1dkitd.fsf@pandora.be>
Lines: 92
User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Common Lisp)
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Date: Tue, 10 Sep 2002 14:42:05 GMT
NNTP-Posting-Host: 213.118.141.68
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1031668925 213.118.141.68 (Tue, 10 Sep 2002 16:42:05 MET DST)
NNTP-Posting-Date: Tue, 10 Sep 2002 16:42:05 MET DST
Organization: Telenet Internet