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

问题描述:

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

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

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

我将lua编译为带有存根库的dll,并使用它链接了我的应用程序和Lua模块。那之后我没有观察到撞车事故。

那么不推荐将Lua C模块静态链接到Lua?

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

Logn ansewer。 1.你必须确保你的两个Lua库都使用相同的标志(对齐,基本类型尺寸)编译。 2.内存分配器必须共享。如果一个Lua静态库分配缓冲区其他应该可以释放它)(使用具有相同动态运行时的MSVC链接。 请勿与静态链接msvcrt.lib)。

其他依赖于操作系统。 在Windows上,您可以从您的应用程序导出Lua API,并将链接模块DLL与此可执行文件链接。 (Ru SciTE团队做到这一点)

但是再次只是与动态Lua库链接。

更新

存在着一个多种变异。 你可以静态链接所有需要的Lua模块。 所以它应该是安全的。