Ich versuche zu lernen, wie man eine C/C++ - Bibliothek in einer Linux-Umgebung erstellen, aber ich habe ein Problem (wahrscheinlich ein triviales) online Tutorials hatten nicht geholfen, zu lösen.Erstellen von Bibliotheken in C/C++ - ld kann meine Bibliothek nicht finden
Für Bestimmtheit lassen Sie uns sagen, dass ich eine foo.c Datei mit dem folgenden Code haben:
//file: foo.c
#include <stdio.h>
void hello(void)
{
printf("hello!\n");
}
ein foo.h:
//file: foo.h
void hello(void);
und ein Programm, das die Funktion verwendet hallo() von foo.c, genannt prog.c:
//file: prog.c
#include "foo.h"
int main(void)
{
hello();
return 0;
}
die drei Dateien sind alle auf dem gleichen Verzeichnis. Dann kompilierte ich foo.c mit:
gcc -fPIC -c foo.c
und bekam eine foo.o Datei. Dann habe ich ld die Bibliotheksdatei zu erstellen:
ld -G foo.o -o libfoo.so
Aber wenn ich versuche prog.c zu kompilieren mit:
gcc -o prog prog.c -lfoo
bekam ich eine Fehlermeldung:
/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status
I‘ Ich bin überzeugt, dass dies eine Art triviales Pfadproblem ist, aber ich konnte keine Lösung finden. Also meine Frage ist wirklich, ob diese Prozedur oben falsch ist oder wenn ich die libfoo.so Datei in einen speziellen Pfad legen muss.
Eine andere Frage ist, wie sich das ändert, wenn ich g ++ anstelle von gcc verwende.
Danke.
EDIT:
Ich weiß, dass ich sowohl prog.c und foo.c kompilieren kann prog.o und foo.o ein sie dann verknüpfen, um eine ausführbare Datei zu machen. Aber in meinem ursprünglichen Problem möchte ich foo.c auf eine Weise kompilieren, die ich an Leute verteilen kann, die meine Funktionen in ihren eigenen Programmen verwenden werden.
Hummmm ... richtig. Gibt es einen Pfad im System, wo ld automatisch nach den Bibliotheken sucht? –
Ja - das ist/usr/local/lib /, dann/usr/lib /. –