我正在创建一个依赖于libxml2的跨平台程序。我不想在应用程序的Windows端口上使用诸如Cygwin或MSYS之类的POSIX环境。我打算创建一个使用Javascript Host for Windows和nmake的构建脚本系统。但是,问题出现在构建系统应该在哪里查找libxml2。在用户没有指定位置时应该看到什么位置?在Linux上,通常是/ usr/lib /和/ usr/local/lib /。但在Windows上,唯一想到的地方是C:\ Windows \ system32。但是不是只有系统修改过的那个目录吗? (我明显知道几乎没有Windows的内部)Windows上的/ usr/lib /相当于什么?
回答
在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,因此上述可能不完全准确。如果有人想改进这个答案,我愿意把它变成一个社区维基。
谢谢。我的方法是在Windows上构建libxml2并链接到库,然后将其运送(不确定是否需要静态或动态)与我的项目。因此,在安装之前,.dll或.lib文件将位于项目目录树中的某个位置。 – godisgood4
- 1. Windows的ldd相当于什么?
- 2. 在Windows上,Mac OS上的DiskArbitration框架有相当于什么?
- 3. 什么是在Windows PowerShell的尾巴-f相当于什么?
- 4. 什么是BindingFlags.Default相当于?
- 5. 相当于Windows上的“stty size”
- 6. 在Windows上的'主机名'相当于
- 7. setuid()在Windows上相当于Java的
- 8. 什么是Linux相当于GetProcessIoCounters?
- 9. iOS和Windows Phone的Android的Renderscript相当于什么?
- 10. Strace相当于windows?
- 11. Windows相当于'nice'
- 12. AF_UNIX相当于Windows
- 13. erand48 windows相当于
- 14. 什么是Linux相当于使用system()
- 15. * nix头部和尾部命令的Windows/DOS相当于什么?
- 16. 什么Linux类相当于CStdioFile
- 17. 什么是WCF的Java相当于
- 18. 什么是Linux相当于LPTSTR和LPCSTR?
- 19. Python:在Windows上相当于signal.pause()
- 20. Linux相当于windows的EnterCriticalSection
- 21. 相当于在Windows的Unix
- 22. 什么是Powershell相当于Pythons sys.stdin.read()?
- 23. 什么的getSelected()相当于(MooTools的1.1)
- 24. 什么是Ruby相当于PHP的的=
- 25. Python的zip(*)的numpy相当于什么?
- 26. Elixir的Ruby的__method__相当于什么?
- 27. jquery中的.Max()相当于什么
- 28. Codename中的`Graphics2d.getFontMetrics()`相当于什么?
- 29. dojo相当于$('body')的是什么?
- 30. 什么是WPF中的“OnIdle”相当于
尝试链接静态,如果你可以。节省了很多麻烦。 – Thomas