Der Code lautet wie folgt
: mytest.c
#include<stdio.h>
#include<stdlib.h>
//Fügen Sie dem Elf-Format einen Abschnitt .interp hinzu. Dieser Abschnitt enthält den Pfadnamen des ELF-Programmparsers.
//Wenn die dynamische Bibliothek diesen Abschnitt nicht enthält, es kann nicht ausgeführt werden
. // Beachten Sie, dass Ihre Connector-Adresse nicht unbedingt der Pfad /lib64/ld-linux-x86-64.so.2 ist. Finden Sie die Connector-Adresse in Ihrer Umgebung selbst
const char ldpath[] __attribute__ ((Abschnitt ( ".interp" ))) = "/lib64/ld-linux-x86-64.so.2";
//Die von der dynamischen Bibliothek ausgeführte Eingabefunktion wird vom Compiler (-Wl,-e,myso_entry)
statisch angegeben void myso_entry()
{ printf( "Dies ist eine Ausgabeinformation für Test\n"); exit(0); } /* Das Folgende sind zwei externe Funktionen, die von der dynamischen Bibliothek bereitgestellt werden */ int myadd(int a,int b) { return a+b; } int mysub(int a,int b) { return ab; } Kompilierungsmethode
gcc -fPIC -shared -Wl,-e,myso_entry -o mytest.so mytest.c
Wl: Weisen Sie den Compiler an, die folgenden Parameter (-e myso_entry) zur Verarbeitung an den Connector zu übergeben.
Der LD-Connector verwendet -e zur Angabe der Eintrag des Programms. Adresse (offensichtlich ist die hier angegebene Eintragsadresse myso_entry)
Operationsergebnis
Fehlermeldung
Fehlerbehebung bei der Ursache: Während des Kompilierungsprozesses erhielt gcc -Wl, -e zur Angabe der Programmeintragskennung und wurde nicht gefunden.
Aber die Scheckbibliothek hat diese Methodenidentifikation
Ursachenermittlung:
Kompilieren und spezifizieren Sie die C-Standardspezifikation c11. Die statisch geänderte Methode ist eine Inline-Methode und für die Außenwelt nicht sichtbar. ld kann die Inline-Methode nicht abrufen. Die Lösung besteht darin, die statische Änderung zu entfernen.