Visual Studio静态链接为独立的exe
我已经阅读了关于这个主题的多个职位,但他们都没有让我建立一个静态链接的EXE。Visual Studio静态链接为独立的exe
在我释放配置(64),我有以下几点:
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我可以看到,它需要与libs相关的dll,它当然找不到。
我误解了如何做到这一点,或者是否有其他的东西可能是错的?
(我正在使用Visual Studio 2017)
是的,看起来你有轻微的误解。
如果某个东西是作为DLL提供的,那么它就是用作DLL。可能有某种方法将DLL合并到可执行文件中,但这将是一种黑客攻击。这不是应该如何工作的。
您正在链接的lib文件只是为了向您提供可以链接的函数,而这些函数除了委托给动态加载的DLL中的相应函数之外什么都不做。没有它,你将不得不自己找到DLL的每个入口点,这将是完全可行的,但有点麻烦。
因此:您必须找到一个glfw3版本,该版本被打包为一个静态可链接库(我不知道是否存在)或者需要将您的.exe与glfw3.dll一起发货。
我如何知道使用的第三方库是否可以静态链接;动态使用lib文件和dll,静态的呢? – Alexander
通常,这些信息应该由图书馆的供应商提供。但作为一个经验法则,如果有两个.lib文件,一个小,一个大,那么大文件用于静态链接。如果只有一个.lib文件,并且它比.dll文件小得多,那么它是用于动态链接的。 –