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?
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>