我正在创建一个依赖于libxml2的跨平台程序。我不想在应用程序的Windows端口上使用POSIX环境,如Cygwin或MSYS。我计划创建一个使用Windows和nmake的Javascript主机构建脚本系统。但是,出现了构建系统应该在哪里寻找libxml2的问题。当用户没有指定位置时,它应该显示在什么位置?在Linux上,它通常是/usr/lib/和/usr/local/lib/。但在Windows上,脑海中唯一浮现的位置是C:\Windows\system32。但是,该目录不是只由系统修改吗?(我显然对Windows的内部原理几乎一无所知)
发布于 2016-07-07 02:07:58
在Windows中,真正等同于/usr/lib/
的是%windir%\system32
,因为它就是always the (last) place where Windows looks for DLLs。
但只是简单地转储你的库,这就是为什么DLL地狱是一件事情的部分原因。这就是引入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,因此上面的内容可能并不完全准确。如果有人想要改进这个答案,我愿意把它变成一个社区维基。
https://stackoverflow.com/questions/38230041
复制相似问题