[英]lib file works but dll file doesn't
因为我通常使用一系列类,所以我希望将它们作为链接库,以便可以轻松使用它们。
我要做的是使用Visual Studio 2013生成两个链接文件: a.lib
和a.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.