在Windows上,/usr/lib/的等效路径是什么?

12

我正在创建一个依赖于libxml2的跨平台程序。在Windows端口中,我不想使用像Cygwin或MSYS这样的POSIX环境。我打算使用Javascript Host for Windows和nmake创建一系列构建脚本系统。但是,问题出现在构建系统应该在哪里查找libxml2。当用户没有指定位置时,它应该在哪些位置查找?在Linux上,通常是/usr/lib/和/usr/local/lib/。但在Windows上,唯一想到的地方就是C:\Windows\system32。但那个目录不是只有系统才能修改吗?(显然,我对Windows内部的东西几乎一无所知)


1
如果可以的话,请尝试静态链接。这样可以避免很多麻烦。 - Thomas
1个回答

10

/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不是很熟悉,因此上面的内容可能不完全准确。如果有人想改进这个答案,我愿意将其转化为社区维基。

谢谢。我的方法是在Windows上构建libxml2并链接库,将其与我的项目一起发布(不确定我是否需要静态或动态)。因此,在安装之前,.dll或.lib文件将位于项目目录树中的某个位置。 - user6557303
实际上,%windir%\system32 相当于 GNU/Linux 中的 /lib//lib64... 因为 Windows 中的用户应用程序不得将其依赖项安装在 %windir%\system32 中。 https://dev59.com/83NA5IYBdhLWcg3wdtr5#14446773 https://dev59.com/ZU3Sa4cB1Zd3GeqPt033#2677931 - Yousha Aleayoub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接