我有一个最初为Linux开发的库。我现在正在把它移植到Cygwin。我注意到我的Cygwin系统上的每个库都是这样安装的:
cygfoo.dll)安装到/usr/bin模式755libfoo.a)安装到/usr/lib模式644libfoo.dll.a)安装到/usr/lib模式755前两件事对我来说很有道理。DLLs是可执行的,所以它们应该是模式755。静态档案不是可执行文件,所以它们是模式644。然而,第三个在我看来似乎很奇怪。导入库实际上是静态存档,而不是可执行文件(ar -t libfoo.dll.a列出了归档的内容)。它们不是也应该安装模式644吗?
为什么使用模式755安装导入库是Cygwin的惯例?
发布于 2012-07-01 20:32:17
我想到的唯一答案是安装程序正在寻找文件名中的".dll“字符串来激活复制的文件的可执行属性(x) .应该一直在寻找/.+..dll$/(仅在结尾处为.dll)。
可以理解的是,操作系统/文件系统之间的阻抗不匹配迫使安装程序/复印机具有在安装程序操作中确定属性值的策略(比将属性列表映射到复制的文件更容易.在windows中只需查找.exe、.com和.dll)
确认这个重命名为"libfoo.dll.a“到”libfoo.dx.a“并测试它.
发布于 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
发布于 2012-06-21 09:28:09
这是Windows的要求:由于.dll文件包含将要执行的代码,因此需要设置可执行位。
删除执行文件的权限,即使执行的进程是分开的,Windows也不会让文件中的任何代码被执行。
附带注意:这是一个常见的误解,即Windows中没有+x位。这在技术上是正确的;Windows不使用POSIX rwx权限,尽管Cygwin确实尝试提供类似它们的接口。Windows确实使用ACL(访问控制列表)作为权限,而这些权限确实有一个“执行权限”的概念,这就是Cygwin映射到其+x位的内容。
在Cygwin邮件列表中有一个关于这个的长时间讨论,如果您想要源代码/进一步阅读的话。
https://stackoverflow.com/questions/11120582
复制相似问题