Warum Symbole einer gemeinsamen Bibliothek nicht gelöst werden konnten, zur link-Zeit?

Dies ist mein 2. post auf dieser Seite in meinem bemühen zu verstehen, die Zusammenstellung/linking-Prozess mit dem gcc. Wenn ich versuche, um eine ausführbare Datei, die Symbole gelöst werden müssen, zur link-Zeit, aber wenn ich versuche auf eine shared-library, die Symbole sind nicht gelöst, die zur link-Zeit in dieser Bibliothek. Sie werden vielleicht behoben werden, wenn ich versuche, eine ausführbare Datei mit diesem gemeinsam genutzten Bibliothek. Hands-on:

bash$ cat printhello.c
#include <stdio.h>
//#include "look.h"

void PrintHello()
{
look();
printf("Hello World\n");
}

bash$ cat printbye.c
#include <stdio.h>
//#include "look.h"

void PrintBye()
{
look();
printf("Bye bye\n");
}

bash$  cat look.h
void look();

bash$ cat look.c
#include <stdio.h>

void look()
{
printf("Looking\n");
}

bash$ gcc printhello.c printbye.c
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
/tmp/cck21S0u.o: In function `PrintHello':
printhello.c:(.text+0x7): undefined reference to `look'
/tmp/ccNWbCnd.o: In function `PrintBye':
printbye.c:(.text+0x7): undefined reference to `look'
collect2: ld returned 1 exit status

bash$ gcc -Wall -shared -o libgreet printhello.c printbye.c
printhello.c: In function 'PrintHello':
printhello.c:6: warning: implicit declaration of function 'look'
printbye.c: In function 'PrintBye':
printbye.c:5: warning: implicit declaration of function 'look'

Also meine Frage ist, warum sind die Symbole nicht aufgelöst, wenn ich die Verknüpfung einer gemeinsam genutzten Bibliothek. Diese arbeiten(Lösen Symbole seiner downstream) müssen getan werden, wenn ich diese Bibliothek verwenden, um eine ausführbare Datei, aber das heißt, wir müssen wissen, was diese Bibliothek hängt davon ab, Wann die diese Bibliothek nutzen, aber ist es nicht nicht unerwünscht?

Dank,
Jagrati

Schreibe einen Kommentar