当 unix/linux 程序需要“东西”时,我通常将库和头分别放入(或者 dpkg 帮我放入)/usr/lib 和 /usr/include 中。
我最近下载了一个库,希望在 Windows 上使用,最近在我的 Linux 机器上也下载了,它提供了预构建的 Windows 二进制文件的下载。当然,它附带了属于该库的 .dll、.lib 和 .h 文件。
我的问题是,是否有任何范例或模式可以让我把这些文件放在哪里,以便我可以从几个不同的程序/源文件中使用它们?库附带的 README 没有提到这一点,所以请原谅我来自 unix 的无知。另外,我使用的是命令行/gcc 工具链,而不是 VC。
答案1
通常,共享的库只有 Visual Studio、.NET Frameworks、DirectX 和 Windows API 的库。其他库通常安装到每个应用程序目录中。通常,如果需要安装库以供共享使用,它将执行以下两项操作之一:
- 安装到 Program Files 或 Program Files\Common Files 下其自己的位置。
- 安装到 \Windows\System32 或(很少)\Windows。这是对大约 10 年前 Windows 工作方式的回归,被认为是一种糟糕的做法(如果不是程序员,那么就是管理员)。
但归根结底,只要用户有读取权限,将它们放在文件系统的哪个位置都无所谓。适当的动态库已注册(大多数响应regsvr32 <dllname>
和regsvr32 /u <dllname>
),因此需要它们的应用程序将向 Windows 注册表询问所需的库(基于 GUID 或类名),并且注册表知道文件在哪里。这里的注册表充当已安装库的全局目录。
更新:
以供参考,这里是 Windows 如何搜索您通过库名指定的库。
如果你指定所需的类,有几种方法可以做到这一点。例如,你可以使用获取类对象如果你知道 CLSID,你可以使用类似CLSID来自程序ID。
答案2
我的个人偏好是执行以下操作之一:
- 在 \Program Files\ 中创建一个文件夹并将它们放在那里。如果需要,您可以将该文件夹添加到 PATH,但如果您需要使用注册 .dll,
regsvr32
您可能不需要将其添加到 PATH。 - 操作与 #1 相同,但将其创建在其他地方的文件夹中
您也可以将其放在 %SYSTEMROOT% 中,但我更喜欢将非 Windows 项目排除在其中。
答案3
如果将它们放入 c:\windows\system32,任何程序都应该可以访问它们(但主要是 cmd 提示符)。
您也可以在任意位置创建自己的文件夹,并将该文件夹添加到高级系统设置中的 Windows“Path”变量中。这将产生相同的效果。