问答

windows下可以“纯静态编译”吗?

作者:admin 2021-04-10 我要评论

在网上看到一个纯静态编译的概念,即ldd的结果是:not a dynamic executable,他是在linux下编译的 我试了下自己开了静态选项编译的文件,还需要这些dll ntdll.d...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

在网上看到一个纯静态编译的概念,即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依赖的吗?

###

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器