jetzt von dem, was ich sehen kann, ist der Befehl -l + filename
, zum Beispiel ist mein Dateiname directory/libtest.so
es wäre -ldirectory/libtest.so
Nein, das ist nicht richtig. Es sollte -Ldirectory -ltest
sein d.h. Sie verwenden -L
um den Suchpfaden ein Verzeichnis hinzuzufügen, in dem der Linker nach Bibliotheken sucht, und Sie sagen mit -l
, welche Bibliotheken verlinkt werden sollen , sondern auf libtest.so
verlinken oder libtest.a
Sie sagen -ltest
ohne lib
Präfix oder die Dateierweiterung.
Sie können Link durch explizite Benennung der Datei, ohne -L
oder -l
Optionen, also nur directory/libtest.so
, aber für dynamische Bibliotheken ist das fast immer falsch, da es genau diesen Pfad in die ausführbare Datei einbettet, sodass sich dieselbe Bibliothek an derselben Stelle befinden muss, wenn das Programm ausgeführt wird. Normalerweise möchten Sie über den Namen (nicht den Pfad) darauf verlinken, damit die Bibliothek mit diesem Namen zur Laufzeit von jedem Ort aus verwendet werden kann.
Dies ist eine Schritt-für-Schritt-Anleitung zum Erstellen und Verknüpfen einer .so mit .cpp-Datei
-
Erstellen Sie eine .cpp-Datei, die Sie in .so konvertieren möchten.
Beispiel -
#include<stdio.h> int add(int a , int b) { return a+b;}
Speichern Sie es unter dem Namen add.cpp
-
Erstellen Sie .so mit dem folgenden Befehl
gcc -c -fPIC add.cpp -o add.o
Dies erstellt libadd.so
-
Erstellen Sie eine .cpp-Datei, die diese .so-Datei verwendet
Beispiel-
#include<stdio.h> extern int add(int a, int b); int main(int argc, char** argv) { printf("Hello the output is %d \n",add(10,15)); return 0; }
Speichern Sie es als main_file.cpp
-
Erstellen Sie mit diesem Befehl eine .o-Datei aus dieser Datei
g++ -c main_file.cpp
-
Verknüpfen Sie .so mit .o mit diesem Befehl
g++ -o prog main_file.o -L. -ladd
Hier gibt L den Ordner mit der .so-Datei an
an
Und -l gibt den Namen der .so-Bibliothek -
Führen Sie das Programm mit dem Befehl aus
./prog