【问题标题】:dll needed at runtime if lib included?如果包含lib,则在运行时需要dll?
【发布时间】:2011-06-06 15:30:32
【问题描述】:

我想创建一个使用 RAPI 的 .dll(在 C++ 中)。为此,我创建了 Visual Studio 项目,然后将附加的包含目录设置到我需要“rapi2.h”的位置,并将附加的链接目录设置到 rapi.lib 所在的位置。

然后我使用我创建的 .dll 文件编写另一个应用程序。此方法工作正常,但在运行时我需要 rapi.dll 存在于运行我的应用程序的计算机上。

有没有办法将一个 .dll 添加到另一个在运行时不需要第一个的 .dll 中?

也许这是一个初学者的问题,但为什么我在运行时需要 dll 而在编译时只需要 .lib 和 .h 关联就足够了?

【问题讨论】:

  • lib 并不意味着静态链接——它可以用于静态和动态链接。它只是用于解析引用。

标签: c++ dll linker


【解决方案1】:

您需要了解dynamic linking and static linking 之间的区别。在您的情况下, lib 只是一个导入库,不包含实际的可执行代码。这是在运行时动态链接的。

【讨论】:

  • 我读过这篇文章。现在事情更清楚了。以及如何最好使用 Visual Studio 进行静态链接?
  • 如果提供了静态库,您只能静态链接。例如,如果有一个 rapi.lib 导入库和一个 rapi.lib 静态库(包含在 rapi.dll 中找到的代码)。通常这不会在 Windows 上完成。如果您调用的代码仅在 rapi.dll 中,那么您别无选择,只能使用此 .dll,除非您自己重写所有导出的函数。
  • 现在一切都清楚了,甚至导入库和静态库之间的区别。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多