2016-04-15 11 views
0

In meiner main source code habe ich eine Funktion namens findConst() definiert. In derselben Quelle lade ich ein gemeinsames Objekt (.so) unter Verwendung von dlopen() und dlsym().Dynamique Linker von Linux: Wie ruft man eine Funktion aus dem Hauptprozess von einem .so-Objekt auf?

In diesem shared object, ich habe einige Code, findConst verwenden() ... aber leider, wenn ich meine progy laufen, bekam ich einen Lookup-Fehler: ./Selene: symbol lookup error: ./SelDirectFB.so: undefined symbol: findConst

Was ich tun müssen, um dieses Problem zu lösen ?

Dank

+1

Das zu tun ist fast immer ein Hinweis auf schlechtes Design. Aber wenn Sie wirklich müssen, dann schauen Sie sich an [Wie man eine Funktion im Hauptprogramm von einer dynamisch geladenen freigegebenen Bibliothek aufruft] (http://stackoverflow.com/questions/17081131/how-to-call-a-function- in-the-main-programm-from-a-dynamisch-geladen-shared-libr) – kaylum

+0

Danke für das Hinzeigen auf diese andere Frage, die ich nicht finden konnte: -Wl, - Export-Dynamik macht es funktioniert. Aber halten Sie das für ein schlechtes Design? Das Ziel ist nicht, eine Bibliothek zu erstellen, die von mehreren Tools gemeinsam genutzt wird. Ziel ist es, ein Plugin für ein bestimmtes Programm zu erstellen. Es dient nur dazu, die DirectFB-Verwendung optional zu machen, abhängig davon, auf welchem ​​System mein Tool ausgeführt wird. – destroyedlolo

Antwort

1

Sie können das nicht tun, und wenn Sie zu tun, erfolgreich zu sein, so sollten Sie nicht. Das Gegenteil machen, findConst() im Shared-Objekt definieren und dann im Hauptprogramm mit dlsym() laden.

Oder noch besser, verknüpfen Sie das Hauptprogramm mit dem gemeinsamen Objekt und rufen Sie die Funktion direkt auf.