【发布时间】:2017-07-26 05:49:57
【问题描述】:
我已经连续 15 个多小时尝试找到一种方法来静态编译我的 Native C++ 游戏,使其不需要某些 DLL(我认为这与 CRT 相关)。
下载我的游戏的用户抱怨缺少几个 DLL,例如:
VCRUNTIME140.dll
api-ms-win-core-timezone-l1-1-0.dll
api-ms-win-core-timezone-l2-1-0.dll
api-ms-win-core-processthreads-l1-1-1.dll
(and the list goes on)
我当前的构建命令行是:
/MP /GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /sdl
/Fd"Release\vc140.pdb" /Zc:inline /fp:precise /D "WIN32"
/D "_CRT_SECURE_NO_WARNINGS" /D "_WIN32_WINNT=0x0501" /D "BOT_PROTECTION"
/D "CLIENT" /D "FW_GRAPHICS" /D "FW_NET" /D "FW_XML"
/D "NDEBUG" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MT
/Fa"Release\" /EHsc /nologo
/Fo"Release\\Win32\src\%(RelativeDir)\" /Fp"Release\otclient.pch"
有什么想法吗?
【问题讨论】:
-
除了偏好之外,还有什么理由避免使用 DLL?
-
这是偏好。但是,如果我可以将它减少到大约 2 或 3 个 DLL 文件,我不会介意。我真的不希望用户(对调查不感兴趣,只想点击播放)解压缩一个充满DLL文件的文件夹,而不得不四处寻找EXE。
-
这并不总是可能的,至少不使用您的链接器。动态库并不打算硬链接到您的程序中。这是some explanation。您可以做的是将它们烘焙到您的
.exe文件中,然后在运行时进行一些黑客操作以从中提取它们。如今,将其作为单数 .exe提供也非常粗略。为人们提供一个安装程序,将内容放在正确的位置,创建开始菜单项,并注册它以进行卸载。 -
我只能同意@tadman。安装程序是干净的方式。
标签: c++ visual-studio visual-studio-2015 native static-linking