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.
一起发货
我已阅读多篇关于此主题的文章,但其中 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.
一起发货