相关疑难解决方法(0)

共享库中的类和静态变量

我正在尝试使用以下架构在c ++中编写内容:

App - > Core(.so)< - 插件(.so)

对于linux,mac和windows.Core隐式链接到App,而插件显式链接到dlopen/LoadLibrary到App.我遇到的问题:

  • Core中的静态变量在运行时被复制 - 插件和应用程序具有不同的副本.
  • 至少在mac上,当Plugin返回指向App的指针时,动态转换App中的指针总是导致NULL.

    有人可以给我一些不同平台的解释和说明吗?我知道在这里问他们所有人似乎都很懒,但我真的找不到这个问题的系统答案.

    我在entry_point.cpp中为插件做了什么:

    #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: …
    Run Code Online (Sandbox Code Playgroud)
  • c++ shared-libraries

    28
    推荐指数
    1
    解决办法
    2万
    查看次数

    标签 统计

    c++ ×1

    shared-libraries ×1