我已经阅读了有关此主题的多篇帖子,但没有一篇能让我构建一个静态链接的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)
答案 0 :(得分:0)
是的,您似乎有一点误会。
如果某些东西是作为DLL提供的,那么它就可以用作DLL。可能有某种方法将DLL合并到可执行文件中,但这将是一个黑客攻击。这不是事情应该如何发挥作用。
您链接的lib文件只是为了向您提供可以链接的函数,除了委托动态加载的DLL中的相应函数之外什么也不做。没有它你必须自己找到DLL的每个入口点,这是完全可行的,但有点麻烦。
所以:你必须找到一个版本的glfw3,它被打包成一个静态可链接的库(我不知道是否存在)或者你的.exe需要与glfw3.dll一起发布。