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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.