博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Windows中对程序运行时依赖cygwin1.dll文件的一点看法
阅读量:6430 次
发布时间:2019-06-23

本文共 1186 字,大约阅读时间需要 3 分钟。

hot3.png

在Windows上用过Cygwin的人都很清楚一点, 所有基于Cygwin的项目在底层都必须依赖于cygwin1.dll这个文件, 而且任何以Cygwin环境来构建的软件在运行时也必须依赖cygwin1.dll。因此, 对于想让软件实现静态编译的人来说, 摆脱对cygwin1.dll的依赖便成了一个头疼的问题。

关于去除对cygwin1.dll文件依赖这个问题, Cygwin的明确说明不可以, 而且这还涉及到Cygwin的的问题。去网上搜索一下就可以发现, 在老版本的Cygwin中使用-mno-cygwin参数就可以解决问题了, 但是对于现在使用的版本来说, 这个参数是为无效的。大家普遍的解决办法就是, 要不就带着cygwin1.dll运行, 要不就用MinGW工具链来编译。难道就没有其他的办法了吗?

现在, 我们来仔细分析一下这个问题。如果软件源码能用MinGW工具链来构建, 那理所当然是最好的了, 完全可以不依赖cygwin1.dll。如果无法使用MinGW构建, 那么只有以下几种情况:

  1. 采用了Linux的API, 或者系统调用是符合POSIX标准的, 而Windows上并不具备这样的调用方式
  2. 软件使用了一些无法跨平台的库
  3. 代码是与具体的平台相关的, 无法实现跨平台移植

对于2和3, 到目前为止还真的没有什么特别好的解决方案, 但是对于1, 还是可以去克服的, 具体方法也可以分为几种:

  1. 将Linux(POSIX)的API调用换成标准的Windows调用,
  2. 从底层去实现一遍代码中所调用的LINUX(POSIX)函数。

在Windows中, 某些API是与POSIX标准所兼容的, 所以方法1可以去试一试。至于方法2, 一方面可以自己去试着封装Windows底层的API然后调用, 另一方面也可以去参照现成的代码稍作修改后调用。但是存在的最大的不足之处就在于, 某些API调用如Linux下的fork(), 在Windows下面就较难去通过修改代码实现。

因此, 不是说, 所有的软件, 在所有的情况下, 都能够摆脱对cygwin1.dll文件的依赖的。

在最后, 与大家分享一些项目, 可以帮助大家把项目从Linux方便的移植到Windows上面:

  • (the Posix-over-Win32 layer)
  • (A C runtime library for Windows that extends the MS libc by providing features defined in the POSIX standard and the Single Unix Specification)
  • (GNU portability library )

转载于:https://my.oschina.net/u/2368094/blog/730775

你可能感兴趣的文章
ArcGIS for qml -测距
查看>>
Apache Tomcat 9.0.17 发布,知名 Web 应用服务器
查看>>
思考gRPC :为什么是HTTP/2
查看>>
百度算法常见规则,百度算法汇总及应对方法
查看>>
27、有赞Vant组件库的引入及轮播图片预览的实现②
查看>>
.NET CORE 框架ABP的代码生成器(ABP Code Power Tools )使用说明文档
查看>>
Hash算法入门指南(聊点不一样的算法人生)
查看>>
PowerDesigner(数据建模)使用大全
查看>>
springcloud eureka 服务注册中心
查看>>
SpringBoot 缓存&资源优化
查看>>
【算法学习笔记】之分治算法
查看>>
蜗牛爬行日记——判断闰年
查看>>
classpath的作用
查看>>
Cimg代码初探
查看>>
推荐几种Java任务调度的实现
查看>>
如何用Docker定制你自己的Beego环境
查看>>
Design Pattern: Observer Pattern
查看>>
服务器性能配置要点总结
查看>>
.Net Core使用Redis的一个入门简单Demo
查看>>
汇洁集团牵手阿里云,开启内衣服饰企业数字化转型
查看>>