如何静态构建和链接LuaJIT(VS 2013)

问题描述 投票:0回答:3

前提:我希望我的 C++ 应用程序不依赖于任何东西

Microsoft Visual C++ redistributable
,这样我就可以提供开箱即用的可执行文件。

我首先做了什么:将运行时库从

Multithread (/MT)
切换到
DLL Multithread (/MD)
,以避免需要
msvcr110.dll
(VS 2013不应该需要120版本,因为它是编译器版本?)。为此,我还必须重新编译我正在使用的另一个库和相同的运行时库,这很有效。我有我的 .exe,它可以在任何地方运行而不会出现问题(或者我没有意识到,哈哈)。

然后我添加了一些使用 LuaJIT 的功能。我已经通过包中提供的

msvcbuild.bat
构建了 LuaJIT,它的工作就像一个魅力,但现在我的可执行文件需要
msvcr110.dll
才能运行。我想那是因为 LuaJIT 是用 /MD 标志编译的,但我想知道是否有正确的方法来做我想要的事情。

c++ linker luajit visual-studio-2013
3个回答
7
投票

您应该使用 static 命令行参数运行 msvcbuild.bat


4
投票

我没有对此进行测试,但您很可能需要在您所做的编译的每个部分上使用 /MT 标志。在这种情况下,您的主程序和 LuaJIT 都是如此。在该 msvcbuild.bat 文件(https://github.com/luvit/luajit-2.0/blob/master/src/msvcbuild.bat)中,您可以看到它们明确指定了 /MD(第 17 行)。我认为这是你的问题。改为 /MT 看看。


0
投票

LuaJIT Makefile 说:

# Windows 不支持混合模式。而且静态模式效果不佳。
# C 模块无法加载,因为它们绑定到 lua51.dll。

我不是 Windows 用户,也没有安装工作版本,所以我无法测试它,但静态链接很可能不起作用(很好)。

如果有人成功在 Windows 上静态构建 Lua 并且它可以使用 C 模块,请 lmk。现在我假设它会产生一个损坏的构建。

© www.soinside.com 2019 - 2024. All rights reserved.