Verwendung der Linux Dynamic Link Library

Verwendung der Linux Dynamic Link Library

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.

/usr/bin/ld: sum.o: Relocation R_X86_64_PC32 gegen undefiniertes Symbol `exit@@GLIBC_2.2.5' kann beim Erstellen eines gemeinsam genutzten Objekts nicht verwendet werden; mit -fPIC neu kompilieren.
/usr/bin/ld: letzter Link fehlgeschlagen: Ungültiger Wert
collect2: Fehler: ld hat den Exit-Status 1 zurückgegeben

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

Fehler beim Laden gemeinsam genutzter Bibliotheken: sum.so: Gemeinsam genutzte Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis

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:
  • Eine detaillierte Einführung in Linux-Hardlinks und Softlinks
  • Detaillierte Erklärung der Linux-Softlinks und Hardlinks
  • Was sind Linux-Softlinks und Linux-Hardlinks?
  • Hinweise zur Verwendung der verknüpften Liste des Linux-Kernel-Gerätetreibers
  • Probleme mit dem Ladepfad und Suchpfad der Dynamic Link Library unter Linux
  • Python-Tutorial zum Aufrufen dynamischer Linkbibliotheken in Windows und Linux
  • Detaillierte Erklärung der Linux-Linkkompilierung
  • Analyse der Prinzipien und Verwendung von Linux-Hardlinks und Softlinks

<<:  Grafisches Tutorial zur Installation von MySQL5.7.18 im Windows-System

>>:  Zusammenfassung einiger effizienter magischer Operatoren in JS

Artikel empfehlen

HTML-Grundlagen_Allgemeine Tags, allgemeine Tags und Tabellen

Teil 1 HTML <html> – Start-Tag <Kopf>...

Das native VIDEO-Tag der HTML-Seite verbirgt die Download-Button-Funktion

Beim Schreiben eines Webprojekts stieß ich auf ei...

Zusammenfassung von 10 erweiterten Tipps für Vue Router

Vorwort Vue Router ist der offizielle Routing-Man...

6 Vererbungsmethoden von JS Advanced ES6

Inhaltsverzeichnis 1. Vererbung der Prototypkette...

5 äußerst nützliche Open-Source-Docker-Tools, die dringend empfohlen werden

Einführung Die Docker-Community hat viele Open-So...

So erweitern Sie Vue Router-Links in Vue 3

Vorwort Das Tag <router-link> ist ein großa...

So implementieren Sie mehrere Parameter in el-dropdown in ElementUI

Aufgrund der zunehmenden Anzahl von Schaltflächen...