Legen Sie den ausführbaren Eintrag für die dynamische C-Bibliothek unter Linux fest

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.

おすすめ

転載: blog.csdn.net/HideInTime/article/details/129795087