在Windows上相当于/ usr / lib /?

7 windows

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

小智 5

/usr/lib/在Windows中%windir%\system32,真正的等效点是它,因为它始终是Windows寻找DLL的(最后)地方

但是,仅将您的库转储,就是DLL Hell成为问题的部分原因。这就是引入COM系统的原因。如果您的DLL是COM类的“服务器模块”,则可以对其进行注册(例如,通过regsvr32实用程序),然后应用程序可以通过该CoCreateInstance()函数动态链接其所服务的类。此处,注册表用于的目的/usr/lib/,但完全不同。

在现代Windows版本中,并排(并不需要注册)的并排程序集不再需要显式注册。实际上,有时需要显式取消注册程序集才能在此新系统中正常运行。从这个意义上讲,%SystemRoot%\winsxs与等效/usr/lib/,但是更复杂。


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

即使它是在系统范围内安装的,但由于libxml2并不是考虑到Windows特定概念的,所以唯一找到它的地方就是%windir%\system32。但是,没有人胆汁。


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