Korrekte Verwendung von libdl und dynamisch verknüpften Bibliotheken

8

Ich muss eine von mir erstellte Bibliothek dynamisch verknüpfen. Ich bin mir nicht sicher, was das Problem ist. Alles kompiliert korrekt, aber ich fange immer handle als NULL Zeiger:

%Vor%

Ich kann diesen Fehler nicht passieren und ich bin mir nicht sicher, was möglicherweise falsch ist. Ich bin mir ziemlich sicher, dass ich alles richtig zusammengestellt habe. Hier sind die Kompilierungsschritte, die ich verwendet habe:

%Vor%

Ich erhalte einen Fehler, der

lautet
  

nur ET_DYN und ET_EXEC können geladen werden.

    
Michael Schilling 03.12.2011, 20:17
quelle

4 Antworten

14

Wenn Sie hw11-lib-michaelSchilling.so erstellen, scheinen Sie gcc nicht anzugeben, dass Sie ein gemeinsames Objekt wünschen (das .so im Namen ist nicht genug).

Mit -c wird eine Objektdatei erzeugt (kein shared Objekt) und sie wird als michaelSchilling.so bezeichnet. Der Linker wird nicht einmal aufgerufen.

Entfernen Sie die -c von der Befehlszeile gcc und fügen Sie -shared :

hinzu %Vor%     
NPE 03.12.2011, 22:15
quelle
1

Ein Schrägstrich ( / ) als erstes Zeichen eines Pfadnamens gibt an, dass der Pfadname absolut (relativ zum Stammverzeichnis) ist, nicht relativ zum aktuellen Arbeitsverzeichnis und sicherlich nicht relativ zum Speicherort der Binärdatei. Sie müssen den vollständigen Pfad angeben, indem Sie den Speicherort der Binärdatei ermitteln (was an sich kein einfaches Problem darstellt), oder Sie können $ORIGIN mit dlopen verwenden (funktioniert mit rpath, bin aber unsicher, ob es mit dlopen funktioniert).

    
R.. 03.12.2011 21:52
quelle
0

Ist hw11-lib-michaelSchilling.so im absoluten Wurzelverzeichnis Ihres Dateisystems? Sie behaupten, dass es einen Schrägstrich darauf führt ... aber ich vermute, dass es nicht ist.

Fügen Sie in Ihrer Fehlerbehandlung die Ausgabe von dlerror() in Ihre Ausgabe ein, um die Fehlerursache zu finden.

    
mah 03.12.2011 20:21
quelle
0
%Vor%

funktioniert für mich unter Linux beim Kompilieren der Bibliothek Für den Code, der es öffnet, benötigen Sie -ldl

    
colmustard 01.10.2017 17:13
quelle

Tags und Links