繁体   English   中英

lib文件有效,但dll文件不起作用

[英]lib file works but dll file doesn't

因为我通常使用一系列类,所以我希望将它们作为链接库,以便可以轻松使用它们。
我要做的是使用Visual Studio 2013生成两个链接文件: a.liba.dll
在我看来,我只需要使用其中之一,这意味着我不需要一起使用它们。 令我惊讶的是,如果我将a.lib (不带a.dll )导入到一个新项目中,那么一切都会顺利进行。 但是,如果我导入a.dll (不带a.lib ),则会收到很多错误a.lib 。这是其中之一:

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文件。

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

那你的看法是错误的。

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

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

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

也:

若要隐式链接到DLL,可执行文件必须从DLL的提供程序获取以下信息:

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

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

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

资料来源: MSDN

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

从以上得出的最终结论是您不能执行此操作。 a.lib用于链接到a.dll 它们绑定在一起,不能单独使用。 .lib文件也可以用导出文件代替。 您应该真正阅读本文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM