Warum nicht g ++ Verbindung mit der dynamischen Bibliothek erstelle ich?
-
18-09-2019 - |
Frage
Ich habe versucht, einige Anwendungen zu machen, die alle auf der gleichen Bibliothek verlassen und dynamische Bibliotheken waren mein erster Gedanke: So begann ich, die „Library“ zu schreiben:
/* ThinFS.h */
class FileSystem {
public:
static void create_container(string file_name); //Creates a new container
};
/* ThinFS.cpp */
#include "ThinFS.h"
void FileSystem::create_container(string file_name) {
cout<<"Seems like I am going to create a new file called "<<file_name.c_str()<<endl;
}
ich kompilieren Sie dann die "Library"
g++ -shared -fPIC FileSystem.cpp -o ThinFS.o
Ich schrieb dann schnell eine Datei, die die Bibliothek nutzt:
#include "ThinFS.h"
int main() {
FileSystem::create_container("foo");
return (42);
}
Ich habe dann versucht, das kompilieren mit
g++ main.cpp -L. -lThinFS
Aber es wird mit dem folgenden Fehler nicht kompilieren:
/usr/bin/ld: cannot find -lThinFS
collect2: ld returned 1 exit status
Ich glaube, ich bin fehlt etwas sehr offensichtlich, bitte helfen Sie mir:)
Lösung
-lfoo
sucht eine Bibliothek mit dem Namen libfoo.a
(statisch) oder libfoo.so
(gemeinsam) in der aktuellen Bibliothek Pfad, so die Bibliothek zu erstellen, benötigen Sie g++ -shared -fPIC FileSystem.cpp -o libThinFS.so
verwenden
Andere Tipps
Sie können mit
g++ main.cpp -L. -l:ThinFS
Die Verwendung von „Doppelpunkt“ wird die Bibliotheksnamen verwenden, wie es ist, sondern erfordern einen Präfix von „lib“
der Name der Ausgabedatei sollte libThinFS.so , z.
g++ -shared -fPIC FileSystem.cpp -o libThinFS.so
Das Ergebnis g++ -shared -fPIC FileSystem.cpp
ist kein Objekt-Datei, so sollte es nicht mit .o
beenden. Außerdem sollten gemeinsam genutzte Bibliotheken genannt werden libXXX.so
. Benennen Sie die Bibliothek und es wird funktionieren.
Probiert diesen Artikel aus.
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
Eine gute Quelle, wie verschiedene Arten von Bibliotheken zu bauen. Es beschreibt auch, wie und wo sie zu benutzen.