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.exe
    

    cl.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; }
    
    #endif
    

    shared.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!


Anmelden zum Antworten