在运行时链接c ++对象?

时间:2014-04-11 03:22:53

标签: c++ object dynamic runtime

我正在尝试用c ++编写我的第一个游戏,我希望它能动态加载文件中的所有内容。这包括敌人,我想知道是否有办法在运行时动态包含他们的代码,而不是链接编译,以便水平可以轻松互换。 Lua可能是一个选项,但我不知道从哪里开始,并且dll似乎只是Windows(我不知道从哪里开始)。任何人都可以帮忙吗?

tl; dr我想在运行时将代码链接到我的c ++游戏。

3 个答案:

答案 0 :(得分:1)

对于Lua方法,首先需要选择版本。现在有主要版本5.1和5.2。我之前的工作是使用5.1,对于我的新项目,我决定更新到5.2,但是我发现我最喜欢的脚本包装工具(SWIG)不适用于5.2。只需要在开始时做出决定,因为你不想让版本工作,然后必须改变它。

Lua带有makefile构建环境。我尝试在Windows上构建的第一次体验是一个噩梦,似乎并不是开箱即用的,所以我当时选择创建自己的Visual Studio项目,并且只包括所有项目。项目中的C文件。根据您打算如何编译,有两个文件需要有选择地包含/排除:lua.c和luac.c.如果您打算在应用中嵌入Lua,请排除这两个文件;它们都包含main()函数,旨在构建控制台应用程序。在项目中包含所有其余的C文件。

从这一点开始,您应该能够轻松编译。

当你包含Lua的头文件时,请记住这些函数是C函数,所以如果你从C ++中包含它们,你需要将文件包含在:extern“C”{} - 例如:{{3 }}

将界面包装在另一个主题中,并且有大量可用资源。我最喜欢的是SWIG,但有很多选项,包括手工编码C / C ++的转换 - > LUA - > C / C ++代码。建议只关注第一部分首先工作,嵌入解释器,以便你可以运行“你好,世界!”来自您应用内的Lua脚本。

答案 1 :(得分:0)

因此,根据您对跨平台使用和动态链接的要求,您可能正在寻找的是像QT这样的环境,其中包含QLibrary:https://stackoverflow.com/a/9675063/453673

但是https://softwareengineering.stackexchange.com/questions/88685/why-arent-more-desktop-apps-written-with-qt

MingW是Visual C ++的开源等价物,因此它可以帮助您编写Windows代码(尽管如果我有选择,我可以直接使用Visual C ++)。在Windows中加载dll的方式somewhat similar与他们在Linux中加载的方式相同,因此您可以使用#ifdef'来编写代码。 s做条件编译。几年前我写了一个这样的程序。

答案 2 :(得分:0)

要在Linux下加载共享库(始终以.so作为后缀),您可以使用dlopen(),dlsym()和dlclose()