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依赖的吗?

阅读 3.6k
1 个回答

按你所说的纯静态的概念,在Windows上是不存在的,除了 msvcrt.dll 外,其它的几个库都是Windows 系统的核心,除非你的程序只做纯计算,不做任何io输出,否则必然需要调用系统API,这些系统核心的DLL是必须要打交道的。

而且你所谓的纯静态编译也没有意义,因为你编译的Windows程序不可能脱离Windows环境去运行,系统的动态库你编译到你的程序里面也没任何好处,不要说为了更好的兼容性,因为kernel32.dll又会依赖系统其它的dll,到最后真的纯静态编译是要把整个Windows打包到你的程序里面才能实现,那是没有意义的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题