用于独立Exe的Visual Studio静态链接

时间:2017-07-31 22:09:16

标签: c++ visual-studio exe static-linking

我已经阅读了有关此主题的多篇帖子,但没有一篇能让我构建一个静态链接的exe。

在我的发布配置(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后,我收到错误"代码执行无法继续,因为找不到glfw3.dll ..." 等。

使用dependencywalker我可以看到它需要与lib相关联的dll,它当然无法找到。

我是否误解了如何做到这一点,还是有其他可能出错的地方?

(我使用Visual Studio 2017)

1 个答案:

答案 0 :(得分:0)

是的,您似乎有一点误会。

如果某些东西是作为DLL提供的,那么它就可以用作DLL。可能有某种方法将DLL合并到可执行文件中,但这将是一个黑客攻击。这不是事情应该如何发挥作用。

您链接的lib文件只是为了向您提供可以链接的函数,除了委托动态加载的DLL中的相应函数之外什么也不做。没有它你必须自己找到DLL的每个入口点,这是完全可行的,但有点麻烦。

所以:你必须找到一个版本的glfw3,它被打包成一个静态可链接的库(我不知道是否存在)或者你的.exe需要与glfw3.dll一起发布。