【问题标题】:Multiple Defintion Error when using external Library C++使用外部库 C++ 时出现多重定义错误
【发布时间】:2022-01-03 14:29:51
【问题描述】:

我一直在想,为什么我的 c++ 项目没有编译外部库 SAMDTimerInterrupt.h

我收到以下错误:

C:Documents\vsCode builds\GVS_Stimulator_V1.8\sketch\Stimulator.cpp.o: In function `TC3_Handler':
C:\Documents\Arduino\libraries\SAMD_TimerInterrupt\src/SAMDTimerInterrupt.h:410: multiple definition of `TC3_Handler'
C:\Documents\vsCode builds\GVS_Stimulator_V1.8\sketch\GVS_Simulator_V.1.8.ino.cpp.o:C:\Documents\Arduino\libraries\SAMD_TimerInterrupt\src/SAMDTimerInterrupt.h:410: first defined here
C:\Documents\vsCode builds\GVS_Stimulator_V1.8\sketch\Stimulator.cpp.o: In function `TCC0_Handler':
C:\Documents\Arduino\libraries\SAMD_TimerInterrupt\src/SAMDTimerInterrupt.h:423: multiple definition of `TCC0_Handler'
C:\Documents\vsCode builds\GVS_Stimulator_V1.8\sketch\GVS_Simulator_V.1.8.ino.cpp.o:C:\Documents\Arduino\libraries\SAMD_TimerInterrupt\src/SAMDTimerInterrupt.h:423: first defined here
C:\Documents\vsCode builds\GVS_Stimulator_V1.8\sketch\Stimulator.cpp.o:C:\Documents\Arduino\libraries\SAMD_TimerInterrupt\src/SAMDTimerInterrupt.h:399: multiple definition of `TCC_callback'
C:\Documents\vsCode builds\GVS_Stimulator_V1.8\sketch\GVS_Simulator_V.1.8.ino.cpp.o:C:\Documents\Arduino\libraries\SAMD_TimerInterrupt\src/SAMDTimerInterrupt.h:399: first defined here
C:\Documents\vsCode builds\GVS_Stimulator_V1.8\sketch\Stimulator.cpp.o:C:\Documents\Arduino\libraries\SAMD_TimerInterrupt\src/SAMDTimerInterrupt.h:398: multiple definition of `TC3_callback'
C:\Documents\vsCode builds\GVS_Stimulator_V1.8\sketch\GVS_Simulator_V.1.8.ino.cpp.o:C:\Documents\Arduino\libraries\SAMD_TimerInterrupt\src/SAMDTimerInterrupt.h:398: first defined here

这是我的包含结构:

And here is a link to the external library

我注意到该库在头文件中有定义和声明。 这是问题的根源吗?当我只使用一个 main.cpp 文件时,它会编译。 (注:我只使用 Stimulator.cpp 中的库)

提前致谢, 会

【问题讨论】:

  • 您在项目页面上看到this notice 了吗?再说一遍..所有三个变体都包含 TC3_Handler 的重复定义...
  • 您能否在 stimulator.h 中从 SAMDTimerInterrupt.h 中前向声明您需要的位,并在单独的 .\cpp 文件中#include SAMDTimerInterrupt.h?
  • 是的,我看过这个!但是正如你所说的src、src_cpp、src_h中的SAMDTimerInterrupt.h是一样的!
  • 我会向库提交一个错误并创建您自己的 SAMDTimerInterrupt 子集。
  • 是的,可能必须这样做。

标签: c++ include


【解决方案1】:

我已与库的创建者交谈,并决定将单个 .h 文件拆分为 .h 和 .cpp,以便声明和定义是分开的。希望他能尽快更新 Github 上的 SRC_CPP 文件夹以包含此内容

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 2015-05-25
    • 2021-11-26
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    相关资源
    最近更新 更多