无需 DLL 静态链接 zlib

Posted

技术标签:

【中文标题】无需 DLL 静态链接 zlib【英文标题】:Statically linking zlib without the need of a DLL 【发布时间】:2016-04-13 17:05:17 【问题描述】:

我已经下载并编译了 zlib,并将 zlibwapi.lib 静态链接到我在 Visual Studio 2015 上的 C++ 项目。 但是,如果我不使用 dll 并启动我的程序,它就会抱怨:

"The program can't start because zlibwapi.dll is missing from your computer."

虽然使用 DLL,但不会显示任何错误消息,并且程序运行正常。 有什么方法可以在不需要 zlibwapi.dll 的情况下使用我的程序?

【问题讨论】:

当我在 MinGW / CMake 中遇到此类问题时,我将 -static 添加到 CMAKE_CXX_FLAGS 并关闭。 哦,我完全忘了补充说我是用Visual Studio 2015编译的,我把它加到问题里。我想你的解决方案对我不起作用,如果我错了,请纠正我。 会this 帮忙吗? 我想是的!看来您在运行时可能还需要一个 DLL,这是完全正常的。让我困惑的部分是,另一个应用程序不使用 DLL,但它静态链接 zlib。 Here's 一个不同的,可能更符合你的观点。 【参考方案1】:

我使用 MSVC 10 完成了这项工作。我为 zlib 创建了一个单独的项目并将其构建为静态库 (.lib),然后将其添加到我的主应用程序项目中。这些项目不在同一个工作区中。我确实必须为我的应用程序的 32 位和 64 位版本构建一个单独的 zlib.lib 副本,并且该应用程序本身在动态 DLL 中使用 MFC。一切链接都很好,zlib 不在 DLL 中。

【讨论】:

哦,32/64 位可能是我的问题。我去看看,谢谢!

以上是关于无需 DLL 静态链接 zlib的主要内容,如果未能解决你的问题,请参考以下文章

静态链接库的动态 DLL

dll和lib(包括静态链接库和与dll同时生成的lib)

多个静态链接 dll 的 DLL 重定向

动态链接库和静态链接库

如何静态链接我的 MFC 扩展 DLL?

[转载] 动态链接库dll的 静态加载 与 动态加载