为什么用模式755安装Cygwin导入库?

时间:2012-06-20 13:22:39

标签: cygwin libraries file-permissions

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

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

前两个对我来说很有意义。 DLL是可执行文件,因此它们应该是模式755.静态存档不是可执行文件,因此它们是模式644.然而,第三个对我来说似乎很奇怪。导入库实际上是静态存档,而不是可执行文件(ar -t libfoo.dll.a列出存档的内容)。它们不应该安装模式644吗?

为什么Cygwin上的约定是使用模式755安装导入库?

4 个答案:

答案 0 :(得分:0)

我遇到的唯一答案是安装程序在文件名中查找“.dll”字符串以激活复制文件的可执行属性(x)...应该一直在寻找/.+ \。 dll $ /(仅限于.dll)。

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

要确认这会将您的“libfoo.dll.a”重命名为“libfoo.dxx.a”并对其进行测试......

答案 1 :(得分:0)

回到2000:

  

在NTFS分区上,NT / W2K需要DLL的执行权限   允许在进程启动时加载DLL。

     

除非使用ntsec的人获得tar档案,否则没问题   由不使用ntsec或在FAT分区上打包的人打包。   由于Cygwin仅对后缀“exe”伪造执行权限,   “bat”,“com”,DLL被stat()调用视为不可执行   未设置ntsec的时候。

     

当一个人使用ntsec解压缩该tar存档时,开始一个   需要存档中的一个DLL的应用程序将失败   使用Windows消息

     

“应用程序无法正确初始化(0xc0000022)”

     

对大多数用户来说没有那么有意义。

     

要解决这个问题,我们必须做一个简单的步骤。假执行   未设置ntsec或文件系统未设置时DLL的权限   支持ACL(FAT / FAT32)。

此处:http://cygwin.com/ml/cygwin-developers/2000-10/msg00044.html

答案 2 :(得分:-1)

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

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

旁注:对于Windows来说,没有+ x位是一种常见的误解。这在技术上是正确的; Windows不使用POSIX rwx权限,尽管Cygwin确实尝试提供类似于它们的接口。 Windows确实使用ACL(访问控制列表)来获取权限,这些确实具有“执行权限”的概念,这是Cygwin向下映射到其+ x位的。

如果你想要消息来源/进一步阅读,Cygwin邮件列表上有一个long discussion

答案 3 :(得分:-1)

似乎它只是一个懒惰的黑客导致包含“.dll”的文件名的这种行为。请参阅hasanyasin的答案,了解“修复”(here)背后的原因。