首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么安装模式755的Cygwin导入库?

问为什么安装模式755的Cygwin导入库?
EN

Stack Overflow用户
提问于 2012-06-20 13:22:38
回答 4查看 627关注 0票数 4

我有一个最初为Linux开发的库。我现在正在把它移植到Cygwin。我注意到我的Cygwin系统上的每个库都是这样安装的:

  • DLL (cygfoo.dll)安装到/usr/bin模式755
  • 静态存档(libfoo.a)安装到/usr/lib模式644
  • 导入库(libfoo.dll.a)安装到/usr/lib模式755

前两件事对我来说很有道理。DLLs是可执行的,所以它们应该是模式755。静态档案不是可执行文件,所以它们是模式644。然而,第三个在我看来似乎很奇怪。导入库实际上是静态存档,而不是可执行文件(ar -t libfoo.dll.a列出了归档的内容)。它们不是也应该安装模式644吗?

为什么使用模式755安装导入库是Cygwin的惯例?

EN

回答 4

Stack Overflow用户

发布于 2012-07-01 20:32:17

我想到的唯一答案是安装程序正在寻找文件名中的".dll“字符串来激活复制的文件的可执行属性(x) .应该一直在寻找/.+..dll$/(仅在结尾处为.dll)。

可以理解的是,操作系统/文件系统之间的阻抗不匹配迫使安装程序/复印机具有在安装程序操作中确定属性值的策略(比将属性列表映射到复制的文件更容易.在windows中只需查找.exe、.com和.dll)

确认这个重命名为"libfoo.dll.a“到”libfoo.dx.a“并测试它.

票数 0
EN

Stack Overflow用户

发布于 2012-07-02 09:25:13

回到2000年:

在NTFS分区上,NT/W2K要求DLL的执行权限允许在进程启动时加载DLL。 这没有问题,除非使用ntsec的人获得了一个由不使用ntsec或在胖分区上打包的人打包的tar存档。由于Cygwin只伪造后缀"exe“、"bat”、"com“的执行权限,所以在未设置ntsec时,stat()调用将DLL视为不可执行文件。 当使用ntsec的人解压缩该tar存档时,需要从归档中获取DLL之一的应用程序的启动将在Windows中失败 “应用程序未能正确初始化(0xc0000022)” 对大多数用户来说,这并不是很有意义。 为了解决这个问题,我们必须做一个简单的步骤。当未设置ntsec或文件系统不支持ACL时,伪造DLL的执行权限(FAT/FAT 32)。

这里:http://cygwin.com/ml/cygwin-developers/2000-10/msg00044.html

票数 0
EN

Stack Overflow用户

发布于 2012-06-21 09:28:09

这是Windows的要求:由于.dll文件包含将要执行的代码,因此需要设置可执行位。

删除执行文件的权限,即使执行的进程是分开的,Windows也不会让文件中的任何代码被执行。

附带注意:这是一个常见的误解,即Windows中没有+x位。这在技术上是正确的;Windows不使用POSIX rwx权限,尽管Cygwin确实尝试提供类似它们的接口。Windows确实使用ACL(访问控制列表)作为权限,而这些权限确实有一个“执行权限”的概念,这就是Cygwin映射到其+x位的内容。

在Cygwin邮件列表中有一个关于这个的长时间讨论,如果您想要源代码/进一步阅读的话。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11120582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档