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

#ifndef VICON
#define VICON

//...

#endif  // VICON

警惕,一旦我将 header 包含在多个源代码文件中(直接或间接),就会出现以下链接错误:
  • mainwindow.obj:-1:错误:LNK2005:“class std::basic_ostream>&__cdecl ViconDataStreamSDK::CPP::operator <&,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上进行编码。

    最佳答案

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

    09-06 06:22