dll - 在 .dll 中包含 .lib,程序将其用作插件

标签 dll linker

我正在使用 Visual Studio 2008 尝试创建 .dll。该 dll 使用外部库 (.lib)。编译和链接工作正常(我在选项中包含了 header/lib 的路径)。当我的.dll被程序(作为插件)使用时,它显示“externalLibrary.dll丢失”,但没有externalLibrary.dll,只有一个externalLibrary.lib。

是否有不同的链接选项(因此 externalLibrary 已经在我的 .dll 中)?或者我可以简单地从 .lib 创建一个 .dll 吗?或者还有其他方法可以解决这个问题吗?

编辑(更具体): 在我添加的项目属性中

  • header 路径@C/C++ - 常规 - 其他包含目录
  • 库路径@链接器 - 常规 - 其他库目录
  • 库名称@链接器 - 输入 - 附加依赖项(尽管 这不会改变任何东西)

最佳答案

您使用的 .lib 文件是一个导入库,这基本上意味着它只包含函数/类/...的 stub ,但不包含实际的实现。该实现位于 dll 中。导入库仅对链接器有用,因为它使用它来解析符号。但在运行时,需要实际编译的代码,以便您的应用程序/dll 查找 dll。但即使你的dll被用作插件,它依赖于其他dll也是没有问题的。因此,如果您有其他 dll,我建议您这样做。 (顺便说一句,“externalLibrary”是什么?供应商只向您提供导入库而不提供 dll,这是不正常的)

如果您确实不想使用外部 dll,则必须找到“externalLibrary”代码的静态库。与导入库不同,静态库确实包含完整的实际实现等所有符号。因此,在链接到静态库后,您的应用程序/dll 包含代码本身,不需要在运行时解析它。

关于dll - 在 .dll 中包含 .lib,程序将其用作插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17608235/

相关文章:

c - MinGW:使用 __declspec(dllexport) 或 __attribute__((visibility ("default")))?

c++ - 创建全局键盘钩子(Hook)

c++ - 使用 --whole-archive 标志链接

Eclipse 编译正确,但在 'Problems' View 中显示错误

c++ - 符号名称后的@@符号是什么意思

QT:ssl https craches 我的 dll,抛出 IniterrorSystem.DllNotFoundException

c# - 通过 COM Interop 公开 C# 类

c - Visual Studio C 编译器未将头文件链接到其源对应文件

c - Settings.Default 如何为访问同一 dll 的多个应用程序工作

c++ - 如何链接两个 LLVM 位码模块?