Code von dlo.c (die lib):
%Vor%Kompilieren mit
%Vor%Hier der Code des Hauptprogramms (kopiert von dlopen manpage, und angepasst):
%Vor%Erstellen mit
%Vor%Ausgabe:
%Vor% Die Option -rdynamic
setzt alle Symbole in die dynamische Symboltabelle (die dem Speicher zugeordnet ist), nicht nur die Namen der verwendeten Symbole. Lesen Sie weiter darüber hier . Natürlich können Sie auch Funktionszeiger (oder eine Struktur von Funktionszeigern) angeben, die die Schnittstelle zwischen der Bibliothek und Ihrem Hauptprogramm definieren. Es ist eigentlich die Methode, die ich wahrscheinlich wählen würde. Ich habe von anderen Leuten gehört, dass es in Windows nicht so einfach ist, -rdynamic
zu machen, und es würde auch für eine sauberere Kommunikation zwischen Bibliothek und Hauptprogramm sorgen (Sie haben genaue Kontrolle darüber, was aufgerufen werden kann und nicht), aber es erfordert auch mehr Hauswirtschaft.
Die dlopen()
-Funktion, wie von @litb beschrieben, wird hauptsächlich auf Systemen bereitgestellt, die Objektdateien im ELF-Format verwenden. Es ist ziemlich mächtig und lässt Sie kontrollieren, ob Symbole, die von der geladenen Bibliothek referenziert werden, vom Hauptprogramm erfüllt werden können, und im Allgemeinen lassen Sie sie zufriedenstellen. Nicht alle Ladesysteme für gemeinsam genutzte Bibliotheken sind so flexibel - seien Sie sich bewusst, wenn es um die Portierung Ihres Codes geht.
Der Callback-Mechanismus von @hafez funktioniert jetzt, wo die Knicke in diesem Code gerade sind.