如何在运行时重新编译C ++文件?

时间:2016-10-24 19:51:11

标签: c++ compilation runtime

更新:我最终通过使用DLL并加载和卸载它们来完成这项工作。 https://www.youtube.com/watch?v=mFSv0tf6Vwc

我知道这是可能的,因为我已经看过有关此事的帖子,但我并不理解他们。

所以我有一个类(DetailsLayout)调用另一个类(Components)中的方法。在运行时,我更改组件的内容以将用户创建的另一个组件添加到该方法。我想重新编译DetailsLayout.cpp和Components.h,但我对如何解决这个问题感到困惑。

现在我因为这篇文章而尝试这个:Using G++ to compile multiple .cpp and .h files

system(("g++ -c ProjectComponents.hpp").c_str());
system(("g++ -c DetailsLayout.cpp").c_str());
DetailsLayout::CreateMenu();

我收到一条错误消息,指出g ++未被识别为内部或外部命令。

根据Jesper的建议,提到了我的最终目标。所以现在在我的游戏引擎中,我允许用户动态地向场景中的对象添加组件(我制作的)。当我试图让它成为"用户"除非我编译了我为他们制作的.h和.cpp文件,否则我可以创建一个组件并动态添加它。如果我手动将文件包含到我的项目中并运行添加类的方法它可以工作,但我希望当我单击按钮进行编译时会发生这种情况。

我的组件都继承自此类。

    class Component
{
public:
    Component();
    ~Component();

    virtual bool Initialize() { return true; }
    virtual bool Update(float dt) { dt; return true; }
    virtual bool Draw() { return true; }
    template <class T> T* GetSiblingComponent()
    {
        return m_owner->GetComponentByType<T>();
    }

protected:
    Entity* m_owner;
    char    m_name[Imgn::MAX_NAME_LEN];
    bool    m_enabled;
};

1 个答案:

答案 0 :(得分:0)

  

我收到一条错误消息,指出g ++未被识别为内部或外部命令。

嗯,不能保证GCC安装在目标机器上。如果要在任意主机上编译和运行代码,首先必须确保这一点。

此外,您似乎错过了链接阶段,并调用了生成的可执行文件。