使用Qt Creator我有一个奇怪的问题,我无法用Visual Studio重现。 对于我正在使用的项目,我必须使用第三方dll,为此我需要在代码中包含适当的头文件。但是,即使头文件有一组
#ifndef VICON
#define VICON
//...
#endif // VICON
警卫,只要我将标题包含在多个源代码文件中(直接或间接),我就会发现以下链接错误:
mainwindow.obj:-1:错误:LNK2005:“class std :: basic_ostream>& __cdecl ViconDataStreamSDK :: CPP :: operator<<(class std :: basic_ostream>&,class ViconDataStreamSDK :: CPP :: String const&)“(?? 6CPP @ ViconDataStreamSDK @@ YAAAV?$ basic_ostream @ DU?$ char_traits @ D @ std @@@ std @@ AAV23 @ ABVString @ 01 @@ Z)已经定义在main.obj
debug \ Beetle_01.exe:-1:错误:LNK1169:找到一个或多个多重定义的符号
我可以为你提供源代码,但这似乎无关紧要,即使我没有从这个DLL中调用任何东西,只要相关的头文件出现在多个地方我就会遇到错误。如果头文件只在一个地方,没有问题,我可以调用它的内容,一切都按预期工作。
以下是我在.pro文件中包含dll的方法,希望它是正确的方法:
INCLUDEPATH += .
win32:LIBS += ViconDataStreamSDK_CPP.lib
(相关的lib,dll和h文件都在当前目录中) 我在Windows 7上编码,顺便说一下。
答案 0 :(得分:2)
在我看来,库可能会在头文件中定义operator<<
函数,但忘记将其标记为static
或inline
。这意味着它将在包括头文件在内的所有源文件中定义,并且您将收到您描述的链接器错误。