KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am trying to write something in c++ with an architecture like: App --> Core (.so) <-- Plugins (.so's) for linux, mac and windows. The Core is implicitly linked to App and Plugins are explicitly linked with dlopen/LoadLibrary to App. The problem I have: static variables in Core are duplicated at run-time -- Plugins and App have different copys of them. at least on mac, when a Plugin returns a pointer to App, dynamic casting that pointer in App always result in NULL. Can anyone give me some explanations and instructions for different platforms please? I know this may seem lazy to ask them all here but I really cannot find a systematic answer to this question. What I did in the entry_point.cpp for a plugin: #include "raw_space.hpp" #include <gamustard/gamustard.hpp> using namespace Gamustard; using namespace std; namespace { struct GAMUSTARD_PUBLIC_API RawSpacePlugin : public Plugin { RawSpacePlugin(void):identifier_("com.gamustard.engine.space.RawSpacePlugin") { } virtual string const& getIdentifier(void) const { return identifier_; } virtual SmartPtr<Object> createObject(std::string const& name) const { if(name == "RawSpace") { Object* obj = NEW_EX RawSpaceImp::RawSpace; Space* space = dynamic_cast<Space*>(obj); Log::instance().log(Log::LOG_DEBUG, "createObject: %x -> %x.", obj, space); return SmartPtr<Object>(obj); } return SmartPtr<Object>(); } private: string identifier_; }; SmartPtr<Plugin> __plugin__; } extern "C" { int GAMUSTARD_PUBLIC_API gamustardDLLStart(void) throw() { Log::instance().log(Log::LOG_DEBUG, "gamustardDLLStart"); __plugin__.reset(NEW_EX RawSpacePlugin); PluginManager::instance().install(weaken(__plugin__)); return 0; } int GAMUSTARD_PUBLIC_API gamustardDLLStop(void) throw() { PluginM
Tags (comma-separated)
Save Edits
Cancel