include und linker

Gast #3843159
Lesenswert?

Hallo,

ich hab mal eine Verständnisfrage:

Um z.B. printf benutzen zu können, wird stdio.h eingebunden:
#include <stdio.h>

Wenn dann beim Raspberry Pi die Funktionen aus wiringPi benutzt werden 
sollen, wird auch hier der entprechende Header eingebunden mit
#include <wiringPi.h>

Zusätzlich muss dem Linker aber folgendes mitgegeben werden:
-l wiringPi

Warum wird das im ersten Fall nicht benötigt, dagegen aber im zweiten?

Besten Dank.
Sören
#3843166
Lesenswert?

Weil die Funktionen aus dem C-Standard zwar seitens des Compilers auf 
verschiedene Dateien verteilt sind, für den Linker aber üblicherweise in 
einer Lib zusammengefasst werden.

Ausnahme ist auf manchen Systemen alles, was mit Gleitkommazahlen und 
math.h zu tun hat - das ist gelegentlich in einer eigenen libm.so bzw. 
libm.a enthalten, dafür muß man dann -lm beim Linken angegeben.
Gast #3843269
Lesenswert?

Sören schrieb:
> Wo kann ich sehen, welche Libraries der Linker von sich aus einbindet?

The -v option to gcc will cause it to dump information about the default 
options it will use including the library paths and default libraries 
and object files that will be linked in.
#3843349
Lesenswert?

Evtl. hilft auch das beiliegende Skript weiter, falls man nach Symbolen 
sucht:
1
klwa4731@1188 ~ $ lsexposym pthread_create
2
Suche nach Symbol pthread_create
3

4
pthread_create gefunden in /usr/lib/x86_64-linux-gnu/libpthread.a:
5
Textsegment (Code):            __pthread_create_2_1
6
Weak Symbol:                   pthread_create
7

8

9
pthread_create gefunden in /usr/lib/gcc/x86_64-linux-gnu/4.6/32/libgcc.a:
10
Textsegment (Code):            __wrap_pthread_create
11

12

13
pthread_create gefunden in /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a:
14
Textsegment (Code):            __wrap_pthread_create
15

16

17
pthread_create gefunden in /lib/x86_64-linux-gnu/libpthread-2.15.so:
18
Textsegment (Code):            pthread_create@@GLIBC_2.2.5
19

20

21
pthread_create gefunden in /lib/x86_64-linux-gnu/libpthread.so.0:
22
Textsegment (Code):            pthread_create@@GLIBC_2.2.5
23

24

25
pthread_create gefunden in /lib/i386-linux-gnu/libpthread-2.15.so:
26
Textsegment (Code):            pthread_create@@GLIBC_2.1
27
Textsegment (Code):            pthread_create@GLIBC_2.0
28

29

30
pthread_create gefunden in /lib/i386-linux-gnu/libpthread.so.0:
31
Textsegment (Code):            pthread_create@@GLIBC_2.1
32
Textsegment (Code):            pthread_create@GLIBC_2.0
33

34
klwa4731@1188 ~ $ lsexposym snprintf
35
Suche nach Symbol snprintf
36

37
snprintf gefunden in /usr/lib/x86_64-linux-gnu/libc.a:
38
Textsegment (Code):            __snprintf
39
Weak Symbol:                   snprintf
40
Textsegment (Code):            _IO_vsnprintf
41
Weak Symbol:                   __vsnprintf
42
Weak Symbol:                   vsnprintf
43
Textsegment (Code):            ___snprintf_chk
44
Textsegment (Code):            __snprintf_chk
45
Textsegment (Code):            ___vsnprintf_chk
46
Textsegment (Code):            __vsnprintf_chk
47

48

49
snprintf gefunden in /usr/lib/vmware-ovftool/libcurl.so.4:
50
Textsegment (Code):            curl_msnprintf
51
Textsegment (Code):            curl_mvsnprintf
52

53

54
snprintf gefunden in /usr/lib/vmware-ovftool/libcrypto.so.1.0.0:
55
Textsegment (Code):            BIO_snprintf
56
Textsegment (Code):            BIO_vsnprintf
57

58

59
snprintf gefunden in /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/jamvm/libjvm.so:
60
Textsegment (Code):            jio_snprintf
61
Textsegment (Code):            jio_vsnprintf
62
...
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren