c++ - Qt Creator - 当 dll 的 header 出现在多个位置时出现错误

标签 c++ qt dll qt-creator

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

#ifndef VICON
#define VICON

//...

#endif  // VICON

guard ,一旦我将 header 包含在多个源代码文件中(直接或间接),我就会收到以下链接错误:

  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:找到一个或多个多重定义符号

我可以为您提供源代码,但这似乎无关紧要,即使我没有从这个 DLL 中调用任何内容,只要相关的头文件出现在多个地方,我就会收到上述错误。如果头文件仅位于一个位置,则没有问题,然后我可以调用其内容,一切都会按预期工作。

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

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

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

最佳答案

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

关于c++ - Qt Creator - 当 dll 的 header 出现在多个位置时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664053/

相关文章:

C++ 自定义比较器不工作 MWE

c++ - CMake 与 gmock

c++ - 解析文本以创建树状数据结构

qt - 在 Qt 中异步运行控制台输出和 GUI

c# - 为什么在system32文件夹中找不到C#库?

c# - 在 C# 中使用 vb.net 类

c++ - vector .push_back

c++ - Qt::WA_DeleteOnClose

c++ - 在 Ubuntu 上运行 Qt 创建的可执行文件时出错

dll - 尝试使用 mingw-w64 编译 64 位 DLL