Forum: PC-Programmierung In C: dlopen 'ne C++ lib


von bboy (Gast)


Lesenswert?

Hallo,

ich habe ein lib, die sich aus C & C++ zusammensetzt.

Jetzt moechte ich mit einem C-Programm und dlopen() diese lib einbinden.

dlopen() liefert aber nur NULL zurueck, obwohl die lib gefunden wird. 
Und auch dlerror() weiss nichts.
1
  dl = dlopen(libName, RTLD_NOW);
2
    if (dl == NULL){
3
      fprintf(stderr, "dlopen failed: %s\n", dlerror());
4
5
// AUSGABE: dlopen failed: (null)

Ich habe die komplette C++ Datei und Header mit extern "C" versehen.
Was kann ich noch probieren?

Oder ist das gar nicht moeglich?

: Verschoben durch Moderator
von 123 (Gast)


Lesenswert?

Ich glaube du bist im Forum: Compiler & IDEs falsch.

von Markus F. (mfro)


Lesenswert?

ein Schuß ins Blaue: Du hast die C++ Laufzeitbibliotheken nicht auf dem 
Zielsystem installiert.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

bboy schrieb:
> Ich habe die komplette C++ Datei und Header mit extern "C" versehen.
> Was kann ich noch probieren?

wenn dlopen bereits fehlschlägt, dann kann das doch nix mit dem ABI der 
darin enthaltenen Funktionen zu tun haben. Ist die Library wirklich da, 
wo Du nach Ihr suchst? Ist die Library heil? Je nach Betriebssystem, 
sollte es da ein Tool geben, mit dem man sich die Library angucken kann. 
Was sagt das den?

mfg Torsten

von bboy (Gast)


Lesenswert?

Torsten R. schrieb:
> Ist die Library wirklich da, wo Du nach Ihr suchst?

Ja, wenn ich einen anderen Namen fuer die lib eingebe, kommt eine andere 
Fehlermeldung.

> Ist die Library heil?

Ja, die lib wird sauber gebaut & gelinkt.

> Je nach Betriebssystem, sollte es da ein Tool geben, mit dem man sich die > 
Library angucken kann.
> Was sagt das den?

Meinst du objdump?

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

bboy schrieb:
> Meinst du objdump?

Kommt auf Dein Betriebssystem an, das hast Du uns ja immer noch nicht 
genannt.

von Markus F. (mfro)


Lesenswert?

RTLD_NOW bei dlopen() bedeutet, daß alle undefinierten Symbole beim 
Laden aufgelöst werden müssen.

"(null)" bei dlerror() wahrscheinlich, daß die Fehlermeldung die 
eigentlich da (weil 1.) schief ging) kommen müsste, nicht gefunden wird, 
weil die in einer Library des Laufzeitsystems drinsteckt, die aber nicht 
geladen werden kann.

gibt's ldd auf dem Zielsystem?

: Bearbeitet durch User
von bboy (Gast)


Lesenswert?

Ok, mir war nicht klar, dass eine shared Lib nicht automatisch dynamisch 
ist.
Danke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.