如何使Luabind属性起作用?

我正在尝试在导入类时使用 Luabind 的属性。我确信定义都是正确的,但是当我调用属性,比如打印它如果它是字符串或数字,我会得到类似于这样的错误:

function: 009EC440

现在我不知道为什么会出现这种情况,但我已经在互联网上搜寻了很多人都有这个问题。他们说你应该用这些参数构建Luabind:

bjam toolset=msvc-9.0 variant=debug threading=multi link=shared define=_BIND_TO_CURRENT_VCLIBS_VERSION

现在我已经尝试过这个,但我仍然得到相同的错误。另一个需要注意的事情是我正在使用MSVC 2012,所以我已经尝试用toolset=msvc-11.0构建它,但同样没有效果。我已经读到,如果你不使用Boost build构建你的项目,你需要定义LUABIND_DYNAMIC_LINK,我已经在Luabind的include之前这样做了。但这仍然导致了这个错误。我还尝试过构建Luabind,但在链接时遇到了很多符号错误(我不确定在哪里定义LUABIND_DYNAMIC_LINK,如果有人知道这个可能会解决问题)。有人知道如何解决这个问题吗?

以下是声明属性的代码:

luabind::module(luaState)[
luabind::class_<Weapon>("Weapon")
    .def(luabind::constructor<float, float>())
    .def_readwrite("onFire", &Weapon::onFireFunc)
    .def_readonly("modifier", &Weapon::modifier)
];

它们试图这样访问,其中weapon是使用其构造函数声明的Weapon类的实例:

print(weapon.modifier)
weapon.onFire = onFire

静态链接可以工作,但我想使用动态链接使其工作,使用以下参数:

bjam toolset=msvc-9.0 variant=debug threading=multi link=static define=_BIND_TO_CURRENT_VCLIBS_VERSION

点赞
用户2769942
用户2769942

我在 VS2008 上也遇到了同样的问题。(_这是文章发布 6 个月之后,但或许对其他人有帮助_)

我通过添加 LUABIND_DYNAMIC_LINK 预处理器指令来解决这个问题。

项目 -> 属性 -> C/C++ -> 预处理器

LUABIND_DYNAMIC_LINK 添加到预处理器定义列表中。

我使用和你文章顶部相同的 bjam 命令编译了 luabind。

2013-09-11 18:26:21