lib文件有效但dll文件没有

时间:2015-08-07 08:12:16

标签: c++ dll

由于我通常使用一系列类,我想将它们作为链接库,以便我可以轻松使用它们。
我所做的是我使用visual studio 2013生成两个链接文件:a.liba.dll 在我看来,我只需要使用其中一个,这意味着我不需要一起使用它们。令我惊讶的是,如果我将a.lib(没有a.dll)导入新项目,一切顺利。但如果我导入a.dll(没有a.lib),我将会收到很多错误LNK 2001.这是其中之一:

Error   150 error LNK2001: unresolved external symbol "public: __thiscall ExceptionAlertToLog::ExceptionAlertToLog(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,char const *)" (??0ExceptionAlertToLog@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HPBD@Z)  C:\Users\Thomas\Documents\bloomberg-api\MarketDataAgent\MarketDataAgent\DialogSubsBlp.obj   MarketDataAgent

我似乎无法使用此dll文件,我只能使用此lib文件。

1 个答案:

答案 0 :(得分:2)

  

在我看来,我只需要使用其中一个,这意味着我不需要一起使用它们。

那么你的意见是错误的。

基本上,您可以创建两种类型的库:静态(.lib)和动态(.dll)。但是,.lib文件通常在两种情况下生成:

1. 在静态库的情况下,.lib文件只是.obj文件的组合,包含所有公共类型和符号的定义。它链接到输出.lib / .dll / .exe

2。动态库是使用所谓的import library生成的。它包含有关DLL内符号位置的信息,但不包含实际内容。它在运行时从.dll文件加载。

此外:

  

要隐式链接到DLL,可执行文件必须获取以下内容   来自DLL的提供者:

     
      
  • 包含导出函数和/或C ++类声明的头文件(.h文件)。类,函数和数据应该   所有都有__declspec(dllimport),有关更多信息,请参阅dllexport,   dllimport的。

  •   
  • 要链接的导入库(.LIB文件)。 (链接器在构建DLL时创建导入库。)

  •   
  • 实际的DLL(.dll文件)。

  •   

来源:MSDN

  

但是如果我导入a.dll(没有a.lib)

上面的最后结论是你不能这样做。 a.lib用于链接a.dll。它们绑定在一起,不能单独使用。 .lib文件也可以用导出文件替换。你应该真正阅读this article