我有一个我最初为Linux开发的库。我现在正在将它移植到Cygwin。我注意到我的Cygwin系统上的每个库都安装如下:
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安装导入库?
答案 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)背后的原因。