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

时间:2013-07-12 05:52:00

标签: dll linker

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

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

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

  • 标题路径@ C / C ++ - 常规 - 其他包含目录
  • 图书馆路径@ Linker - General - 其他图书馆目录
  • 库名@ Linker - 输入 - 附加依赖项(尽管 这不会改变任何事情)

1 个答案:

答案 0 :(得分:1)

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

如果你真的不想使用外部dll,你必须找到'externalLibrary'代码的静态库。与导入库不同,静态库确实包含所有符号以及实际实现等。因此,在与静态库链接后,您的application / dll包含代码本身,无需在运行时解析它。