Visual Studio 独立 Exe 的静态链接

Visual Studio Static Linking for Standalone Exe

我已阅读多篇关于此主题的文章,但其中 none 使我能够构建静态链接的 exe。

在我的 release 配置 (x64) 中,我有以下内容:

Configuration Properties -> General : Use of MFC - Use MFC in a Static Library

Configuration Properties -> C/C++ -> Code Generation : Runtime Library - Multi-threaded (/MT)

Configuration Properties -> Linker -> Command Line : Additional Options - I have all the required Windows libs "kernel32.lib", etc. (as use of MFC removed them from the "All Options" window above)

Configuration Properties -> Manifest Tool -> Input and Output : Embed Manifest - No

请注意,在 Configuration Properties -> Linker -> Input 中,我在我的项目中使用了 5 个 lib 文件,例如 glfw3.lib 并且我正在使用完全优化 (/Ox)。

在构建项目和 运行 自己的 exe 后,我收到错误 "The code execution cannot proceed because glfw3.dll was not found..."

使用 dependencywalker 我可以看到它需要与库关联的 dll,当然找不到。

我是不是误解了如何执行此操作,还是有其他可能出错的地方?

(我使用的是 Visual Studio 2017)

是的,看来你有点误会了。

如果某些东西作为 DLL 提供,那么它就意味着用作 DLL。可能有一些方法可以将 DLL 合并到可执行文件中,但这将是一种 hack。事情不应该是这样的。

您 link 反对的 lib 文件存在只是为了向您提供您可以 link 反对的功能,这些除了委托给动态中的相应函数外什么都不做加载的 DLL。没有它,您将不得不自己定位 DLL 的每个入口点,这完全可行,但有点麻烦。

因此:您必须找到一个打包为静态 link 可用库的 glfw3 版本(我不知道是否存在)或者接受这样一个事实,即您的 .exe 需要与 glfw3.dll.

一起发货