在linux / unix世界中,符号链接* .so文件被广泛使用。 即通常看到libfoo.so和libfoo.so.X文件只是符号链接到libfoo.so.XYZ(这是常规文件)。 我从来没有这样的东西在Windows上(虽然Windows 不 支持符号链接)。
总之,当我最近下载Windows的PHP二进制发行版时,我看到了非常相似的图片:
Unversioned * .dll文件显然是常规文件(不是NTFS符号链接或联结点)。 但是,它们的体积非常小(从36到40字节),而且非常具体。 例如,icudt.dll的内容是:
!<symlink>яюi_c_u_d_t_4_9_._d_l_l___
(“_”在这里的意思是“\ x0”,“яю”在这里是“\ xFF \ xFE”)。
这些符号链接的DLL应该如何工作?
注意:PHP是由VC9构build的,因此它可能不是cygwin / mingw相关的东西(正如有人可能首先想到的那样)。 注2:在C:\ Windows目录中找不到这样的小型DLL。
Windows不会将这些文件识别为DLL或DLL的任何类型的链接。 Hans Passant正确地提出这是Cygwin特定的文件,只有基于Cygwin的版本会将它们识别为Cygwin框架的符号链接,而不是Windows操作系统。
如果你尝试在任何标准的Win32 API中使用它们,你会得到一堆声称可执行文件格式无效的加载错误。 事实上,PHP是由VC9编译的,并不意味着VC9创建了这些文件,因为它们很可能是通过一些Cygwin工具准备的。
PS Windows中最小的可执行文件大小为97个字节,如此处所述。