gpt4 book ai didi

c - 在应用程序和 Lua 加载模块中使用 Lua 作为静态库

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:08 39 4
gpt4 key购买 nike

我在我的应用程序中使用 Lua 5.3 作为静态库。我有一个写成 C Dll 的 Lua 模块,它也使用 Lua 5.3 作为静态库。

在加载模块中,我正在注册一个返回值表的函数。表包含字符串作为键和整数作为值。

我观察到多次调用该函数的随机崩溃,并且崩溃显示在 lua_gc 上。

我将 lua 编译为带有 stub 库的 dll,并使用它链接我的应用程序和 Lua 模块。之后我没有观察到崩溃。

那么不建议让 Lua C 模块静态链接到 Lua 吗?

最佳答案

简短的回答就是不要这样做。

登录回答。1. 你必须确保你的两个 Lua 库都使用相同的标志(对齐,基本类型大小)编译。2. 必须共享内存分配器。如果一个 Lua 静态库分配缓冲区,其他应该能够释放它)(使用具有相同动态运行时的 MSVC 链接。不要与静态 msvcrt.lib 链接。

其他取决于操作系统。在 Windows 上,您可以从应用程序中导出 Lua API,并将模块 DLL 与此可执行文件链接起来。 (Ru SciTE 团队这样做)

但同样只是链接到动态 Lua 库。

更新

还有一种变体。您也可以静态链接所有需要的 Lua 模块。所以它应该是安全的。

关于c - 在应用程序和 Lua 加载模块中使用 Lua 作为静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46424963/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com