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
Überblick Der Server des Cloud-Plattform-Kunden k...
Inhaltsverzeichnis Sehen Sie sich dies an.$store....
01. Übersicht Absolute und relative Pfade kommen ...
Einzeilige Funktionen vom Datumstyp in MySQL: CUR...
1. Spring Boot unterstützt kein JSP-JAR-Paket, JS...
Es gibt drei Typen von MySQL-gespeicherten Prozed...
In diesem Artikel wird der spezifische Code der L...
Die in diesem Beispiel verwendete MySQL-Version i...
Einführung: Als ich mir in letzter Zeit die Frage...
In Kombination mit dem Szenario in diesem Artikel...
Vorwort Bei einem seit 4 Jahren laufenden Java EE...
Überblick In einer Datenbank wird ein Index verwe...
Die google.html-Schnittstelle ist wie in der Abbil...
Inhaltsverzeichnis 1. Unterschiede zwischen den b...
Inhaltsverzeichnis 1. Geltungsbereich 2. Geltungs...