Qt Creator - 当dll的标题出现在多个位置时出错

时间:2012-03-12 08:54:34

标签: c++ qt dll qt-creator

使用Qt Creator我有一个奇怪的问题,我无法用Visual Studio重现。 对于我正在使用的项目,我必须使用第三方dll,为此我需要在代码中包含适当的头文件。但是,即使头文件有一组

#ifndef VICON
#define VICON

//...

#endif  // VICON

警卫,只要我将标题包含在多个源代码文件中(直接或间接),我就会发现以下链接错误:

  1. 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

  2. debug \ Beetle_01.exe:-1:错误:LNK1169:找到一个或多个多重定义的符号

  3. 我可以为你提供源代码,但这似乎无关紧要,即使我没有从这个DLL中调用任何东西,只要相关的头文件出现在多个地方我就会遇到错误。如果头文件只在一个地方,没有问题,我可以调用它的内容,一切都按预期工作。

    以下是我在.pro文件中包含dll的方法,希望它是正确的方法:

    INCLUDEPATH += .
    win32:LIBS += ViconDataStreamSDK_CPP.lib
    

    (相关的lib,dll和h文件都在当前目录中) 我在Windows 7上编码,顺便说一下。

1 个答案:

答案 0 :(得分:2)

在我看来,库可能会在头文件中定义operator<<函数,但忘记将其标记为staticinline。这意味着它将在包括头文件在内的所有源文件中定义,并且您将收到您描述的链接器错误。