Definition der Shared Library benutzen
-
Hallo Zusammen!
Ich sitze noch immer an meinem kleinen ClassLoader. Jetzt habe ich folgendes Problem: Ich habe eine Klasse samt Definitionen in dem Binary-File und auch in dem Shared Object, dass ich zur Laufzeit dynamisch einbinde. Nun erzeuge ich mir eine Instanz der Klasse (wie ich meine aus der Shared Library heraus). Rufe ich nun aber eine Member-Funktion dieser Instanz auf stellt sich heraus das es offenbar eine Instanz der Klasse/Definitionen im Binary ist.
Also hier mal ein paar Quelltexte. Wenn ich das übersetze und test.exe (ich arbeite mit Cygwin) ausführe wird aber 'Binary' ausgegeben und nicht wie erhofft 'Shared Object'...
GNUmakefile
all: g++ -DDEBUG_DLL -g -Wall -shared -o shared.so shared.cpp g++ -g -Wall -ldl main.cpp -o test clean: rm -f *.so test.execl.hpp
#ifndef CL_HPP_ #define CL_HPP_ 1 #include <iostream> class instantiator { public: static void dump() { #ifndef DEBUG_DLL std::cout << "Binary" << std::endl; #else std::cout << "Shared Object" << std::endl; #endif } }; extern "C" instantiator* create_inst() { return new instantiator; } #endifshared.cpp
#include "cl.hpp"main.cpp
#include <iostream> #include "cl.hpp" #include <dlfcn.h> int main() { void *handle = dlopen("./shared.so", RTLD_LAZY); typedef instantiator* create_inst(); create_inst* createPtr = (create_inst*)dlsym(handle, "create_inst"); instantiator* instant = createPtr(); instant->dump(); delete instant; dlclose(handle); return 0; }Für Hinweise und Tipps bin ich wie immer dankbar!