Im Vergleich zu gewöhnlichen Programmen haben dynamische Linkbibliotheken keine Hauptfunktion, sondern sind die Implementierung einer Reihe von Funktionen. Generieren Sie so dynamische Linkbibliotheksdateien durch gemeinsame und fPIC-Kompilierungsparameter. Wenn das Programm eine Bibliotheksfunktion aufruft, muss es nur eine Verbindung zu dieser Bibliothek herstellen. Das Folgende implementiert beispielsweise eine einfache dynamische Linkbibliothek zum Transport von Ganzzahlarithmetik, definiert zwei Dateien, calculate.h und calculate.c, und erstellt die dynamische Linkbibliothek libcac.so. Nützliche Befehle für Binärdateien Überprüfen Sie den Dateityp Datei Anzeigen, mit welchen Bibliotheken eine Binärdatei verknüpft ist ldd Zeigen Sie die in der Binärdatei enthaltenen Symbole an. T bedeutet Laden, U bedeutet undefiniertes Symbol nm Informationen aus Binärdateien lesen readelf -a smu.o Konvertieren von Binärdateien in Assembly objdump -d Summe.o Generierung dynamischer Linkbibliotheken Summe.c #include <stdio.h> #include <stdlib.h> int Summe(int x){ int i, Ergebnis=0; für(i=0; i<=x; i++){ Ergebnis+=i; } wenn(x > 100) Ausgang (-1); Ergebnis zurückgeben; }; void-Anzeige(char*msg){ printf("%s\n",msg); } int add(float a,float b){ gib a+b zurück; } int Summe_Array(int Array[], int Num){ int i = 0, Summe = 0; für (i = 0; i < Zahl; ++i) Summe += Array[i]; Rücklaufsumme; } void array_modifizieren(int array[], int num){ int i = 0, Summe = 0; für (i = 0; i < Zahl; ++i) Array[i] *= 10; } main.c #include <stdio.h> #include <stdlib.h> int Haupt(void){ int x; printf("Geben Sie eine Ganzzahl ein:\n"); scanf("%d", &x); printf("Summe=%d\n", Summe(x)); gebe 0 zurück; }; Ausführbare Datei generieren gcc -c main.c -o main.o gcc -c Summe.c -o Summe.o gcc Summe.o Haupt.o Die Haupt-Ausführungsdatei wird generiert Datei main // ELF 64-bit LSB ausführbare Datei Datei sum.o // ELF 64-Bit LSB verschiebbar Da sum.c wiederverwendbare Funktionen enthält, möchte ich sum.c in eine dynamische Linkbibliothek kompilieren gcc sum.o -shared -o sum.so Ein Fehler ist aufgetreten.
Dies bedeutet, dass nicht alle O-Dateien in dynamische Linkbibliotheken kompiliert werden können. Sie müssen beim Generieren der O-Datei den Parameter -fPIC hinzufügen. gcc -c Summe.c -fPIC -o Summe.o gcc sum.o -o geteilte Summe.so Im Allgemeinen lautet der Kompilierungsbefehl für eine gemeinsam genutzte Bibliothek (vorheriges Experiment): Dynamische Linkbibliothek gcc -shared -fPIC -o libmyhello.so hallo.o gcc -o hallo main.c -L. -lmyhallo Statischer Link ar rcs libxx.a xx.o g++ -o main main.cpp -static -L. -lxx Zu diesem Zeitpunkt g++ -o main main.c Summe.so ./hauptsächlich Manchmal wird ein Fehler gemeldet
ldd Haupt Ausgabe: sum.so => nicht gefunden Zu diesem Zeitpunkt brauchen Sie export $LD_LIBRARY_PATH=pwd:$LD_LIBRARY_PATH Hinweis: -fPIC wird beim Generieren von .o verwendet und -shared wird zum Generieren dynamischer Linkbibliotheken verwendet Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Grafisches Tutorial zur Installation von MySQL5.7.18 im Windows-System
>>: Zusammenfassung einiger effizienter magischer Operatoren in JS
Teil 1 HTML <html> – Start-Tag <Kopf>...
Es gibt zwei Möglichkeiten, MySQL 5.7 zu installi...
Beim Schreiben eines Webprojekts stieß ich auf ei...
Syntax: ROW_NUMBER() OVER(PARTITION BY COLUMN ORD...
Vorwort Vue Router ist der offizielle Routing-Man...
Die Verwendung des offiziellen MySQL-Images erfor...
Inhaltsverzeichnis Vom Vater zum Sohn Vom Sohn zu...
Inhaltsverzeichnis 1. Vererbung der Prototypkette...
Einführung Die Docker-Community hat viele Open-So...
1. Aktualisieren Sie die gesamte Tabelle. Wenn de...
Inhaltsverzeichnis Was ist ein Skelettsieb? Demo ...
Wenn das Softwarepaket nicht vorhanden ist, kann ...
Vorwort Das Tag <router-link> ist ein großa...
Im Allgemeinen können wir beim Herunterladen von ...
Aufgrund der zunehmenden Anzahl von Schaltflächen...