Windows上的/ usr / lib /相当于什么?

我正在创build一个依赖于libxml2的跨平台程序。 我不想在应用程序的Windows端口上使用诸如Cygwin或MSYS之类的POSIX环境。 我打算创build一个使用JavaScript Host和Windows的构build脚本系统。 但是,这个问题出现在构build系统应该在哪里查找libxml2。 在用户没有指定位置时应该在什么位置看? 在Linux上,通常是/ usr / lib /和/ usr / local / lib /。 但在Windows上,唯一想到的地方是C:\ Windows \ system32。 但是不是只有系统修改的目录吗? (我显然对Windows的内部知之甚less)

Windows中/usr/lib/的真正等价物是%windir%\system32 ,因为它始终是Windows查找DLL的(最后一个)位置 。

但是简单地倾销你的库就是为什么DLL地狱是一件事情。 这就是COM系统引入的原因。 如果您的DLL是COM类的“服务器模块”,则可以注册它(例如通过regsvr32实用程序),之后应用程序可以通过CoCreateInstance()函数动态链接其服务的类。 这里,注册表服务于/usr/lib/的目的,但是完全不同。

在现代Windows版本中, (免注册)并行程序集不再需要显式注册。 事实上,有时需要明确的注销注册组件,以便与这个新系统打好关系。 从这个意义上说, %SystemRoot%\winsxs等同于/usr/lib/ ,但是更为复杂。


由于这个混乱, 你的根本问题的答案 —“我应该在哪里寻找libxml2 ?” — 是“你不会找到它” 。 与用于模块化的操作系统不同,通常不要在Windows上安装单独的库。 如果您想要针对libxml2构建,则可以将.lib文件与您的源代码捆绑在一起,或者告诉用户提供它。 如果您想部署一个构建版本,您可以将libxml2与应用程序一起部署(静态链接或作为应用程序目录中的DLL)。

即使系统安装了系统,因为libxml2并不是针对特定于Windows的概念编写的,唯一可以找到它的地方是%windir%\system32 。 尽管如此,没有人敢把它放在那里。


注意:我不是很熟悉COM和.NET,所以上面的内容可能不完全准确。 如果有人想改善这个答案,我打算把它变成一个社区维基。