我正在创建一个依赖于 libxml2 的跨平台程序。我不想在应用程序的 Windows 端口上使用 POSIX 环境,例如 Cygwin 或 MSYS。我计划使用 Javascript Host for Windows 和 nmake 创建一个构建脚本系统。但是,出现了构建系统应该在哪里寻找 libxml2 的问题。当用户未指定位置时,它应该在哪些位置查找?在 Linux 上,通常是 /usr/lib/ 和 /usr/local/lib/。但在 Windows 上,唯一想到的地方是 C:\Windows\system32。但那个目录不是只有系统修改的吗? (显然我对 Windows 的内部结构几乎一无所知)
真正相当于/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,因此上述内容可能不完全准确。如果有人想改进这个答案,我愿意将其变成社区维基。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)