由于我通常使用一系列类,我想将它们作为链接库,以便我可以轻松使用它们。
我所做的是我使用visual studio 2013生成两个链接文件:a.lib
和a.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
文件。
答案 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。