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

时间:2016-07-06 17:24:04

标签: windows

我正在创建一个依赖于libxml2的跨平台程序。我不想在应用程序的Windows端口上使用诸如Cygwin或MSYS之类的POSIX环境。我打算使用Javascript Host for Windows和nmake创建一个构建脚本系统。但是,问题出现在构建系统应该寻找libxml2的位置。当用户未指定位置时,它应该在哪些位置?在Linux上,它通常是/ usr / lib /和/ usr / local / lib /。但在Windows上,唯一想到的地方是C:\ Windows \ system32。但该目录是否仅由系统修改? (我显然对Windows内部几乎一无所知)

1 个答案:

答案 0 :(得分:4)

Windows中/usr/lib/的真实等价物为%windir%\system32,因为它是always the (last) place where Windows looks for DLLs

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

在现代Windows版本中,(registration-free) side-by-side assemblies不再需要显式注册。事实上,有时需要明确注销程序集才能使用这个新系统。从这个意义上讲,%SystemRoot%\winsxs相当于/usr/lib/,但却更加复杂。

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

即使它是在系统范围内安装的,因为libxml2并非考虑到特定于Windows的概念,因此找到它的唯一地方是%windir%\system32。但是,没有人能把它放在那里。

注意:我不太熟悉COM和.NET,因此上述内容可能不完全准确。如果有人想要改进这个答案,我愿意将其转变为社区维基。