wie Funktion in der ausführbaren Datei von meiner Bibliothek aufrufen?

8

Ich habe eine ausführbare Datei und eine dynamische Bibliothek (.so). Die Bibliothek exportiert einige Symbole und führt sie erfolgreich aus. Aber ich möchte Bibliotheksaufruf ausführbare Funktionen ermöglichen. Ich habe versucht, folgendes in ausführbaren Dateien zu tun:

%Vor%

und das in der Bibliothek:

%Vor%

aber wenn ich dlopen in ausführbarer Datei aufruft (um die Bibliothek zu laden), wird der Fehler undefined symbol: print zurückgegeben. wie kann ich es reparieren?

    
milo 09.06.2011, 12:04
quelle

2 Antworten

9

In Linux / ELF können Sie die Option -export-dynamic an den Linker übergeben ( -rdynamic im Compiler-Treiber gcc ), so dass Symbole aus der ausführbaren Datei in gemeinsame Objekte exportiert werden.

Sie hätten eine Dummy print -Implementierung in Ihrer Bibliothek, die von der Implementierung Ihrer ausführbaren Datei überschattet würde, da die ausführbare Datei normalerweise vor freigegebenen Objekten zur Symbolauflösung gesucht wird.

Dies hat den Nachteil, dass es nicht sehr feinkörnig ist, Sie könnten damit enden, dass Sie ein Symbol außer Kraft setzen, das Sie nicht vorhaben. Die feinkörnigere Option besteht darin, eine Liste von Symbolen zu erstellen, die exportiert werden sollen:

%Vor%

und übergibt diese Liste an den Linker, z. von gcc: -Wl,--dynamic-list=<file with list of symbols>

    
ninjalj 09.06.2011, 19:52
quelle
4

Eine einfachere Möglichkeit, dies zu erreichen, ist, dass die ausführbare Datei eine Funktion für die spätere Verwendung durch die Bibliothek registriert, die Bibliothek einen Zeiger auf die Funktion speichert und sie zu einem späteren Zeitpunkt aufrufen kann.

    
Hasturkun 09.06.2011 12:11
quelle

Tags und Links