In C: dlopen 'ne C++ lib

Gast #4182903
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?
(Firma: Torrox.de) #4182927
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
Gast #4182937
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?
#4182950
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren