项目静态链接到库,但是仍然需要DLL运行(Program statically linked to

2019-06-25 12:19发布

有些事情,当谈到联......我正在写使用第三方库(GEOS该库)的程序,我不明白。 这个程序有一个依赖于geos.lib但仍需要geos.dll运行。

我看这个问题 ,我想我明白了静态和动态库之间的差异。 我不明白的是为什么我还需要一个DLL时,我静态链接库。

Answer 1:

它不是静态链接。 在的.lib只是在Windows下的.dll文件结合存根库。 也就是说,你在编译时的.lib链接,然后在运行时,它会去寻找.dll文件。



Answer 2:

有3种在Windows库:

  • 对象库(* .LIB)
  • 导入库(* .LIB)
  • 动态链接库(* .dll文件)

对象库静态链接。 它们包含由库提取代码的完整的对象定义。

导入库是一个对象库的一种特殊形式。 相反,包含代码的它们包含最终的可执行文件的动态链接库映射连接的信息。

动态链接库,就像对象库,你的程序代码的供应。 然而,这段代码在运行时加载,而不是编译到你的EXE。

你并不总是需要链接导入库。 相反,你可以调用LoadLibrary(),并通过名称或序号查找API的入口点。 (你总是要告诉DLL和你想进入这该DLL的API在代码。)

这里的其他意见是在正确的,你不能让一个DLL到一个静态库而无需重新编译为libary代码 - 这是一个不同类型的输出。



Answer 3:

如果是的.lib Visual Studio创建再检查项目属性值 - >链接器 - >输入 - >模块定义文件。 如果不是空的,则LINK.EXE即使项目属性创建存根库,而不是静态库 - >常规 - >配置类型是“静态库(.LIB)”。



Answer 4:

您definetely链接到一个动态库。 只是因为链接需要的.lib文件并不意味着你要链接到静态库。



Answer 5:

当且仅当这是一个静态库文件,您可以静态链接库文件。 所以,首先你需要你的DLL的项目转换为静态库,构建它,之后用你构建的产品,这将是一个静态的.lib文件。



文章来源: Program statically linked to a library but still needs dll to run
标签: c++ dll linkage