windows下可以“纯静态编译”吗?
在网上看到一个纯静态编译的概念,即ldd的结果是:not a dynamic executable,他是在linux下编译的
我试了下自己开了静态选项编译的文件,还需要这些dll
ntdll.dll => /c/Windows/SYSTEM32/ntdll.dll (0x772f0000)
kernel32.dll => /c/Windows/system32/kernel32.dll (0x770d0000)
KERNELBASE.dll => /c/Windows/system32/KERNELBASE.dll (0x7fefd2c0000)
msvcrt.dll => /c/Windows/system32/msvcrt.dll (0x7fefe520000)
那么windows下可以做到这种纯静态编译吗?
有什么情况是必需纯静态编译,或者移除上述某个dll依赖的吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
按你所说的纯静态的概念,在Windows上是不存在的,除了 msvcrt.dll 外,其它的几个库都是Windows 系统的核心,除非你的程序只做纯计算,不做任何io输出,否则必然需要调用系统API,这些系统核心的DLL是必须要打交道的。
而且你所谓的纯静态编译也没有意义,因为你编译的Windows程序不可能脱离Windows环境去运行,系统的动态库你编译到你的程序里面也没任何好处,不要说为了更好的兼容性,因为kernel32.dll又会依赖系统其它的dll,到最后真的纯静态编译是要把整个Windows打包到你的程序里面才能实现,那是没有意义的。