Skip to content

Compilation Link error with multiple includes #142

Closed
@PPCM

Description

@PPCM

Hello,

I would to make my dev OOP, so each object need to include <TaskScheduler.h>
But it fails during the link process.
The platform used is a WEMOS D1 MINI ESP32

Here is a working example

config.h

#ifndef __CONFIG_H__
#define __CONFIG_H__

#define Test 123

#endif

main.h

#ifndef __MAIN_H__
#define __MAIN_H__

#include <TaskScheduler.h>

#include "config.h"

#endif

main.c

#include <Arduino.h>

#include "main.h"

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

The compile complete correctly, it produce only one warning (already an issue)

Now if I include <TaskScheduler.h> in an other file, the linking process fails for multiple definition of elements
In the previous example modify following files
main.h

#ifndef __MAIN_H__
#define __MAIN_H__

#include <TaskScheduler.h>

#include "config.h"

#include "A.h"

#endif

A.h

#ifndef __A_H__
#define __A_H__

#include <TaskScheduler.h>

#include "config.h"

#endif

A.cpp

#include "A.h"

It produces the following error:

.pio\build\wemos_d1_mini32\src\main.cpp.o: In function `Task::isEnabled()':
C:\Users\ppcm\Documents\PlatformIO\Projects\Test/.pio\libdeps\wemos_d1_mini32\TaskScheduler\src/TaskScheduler.h:458: multiple definition of `Task::isEnabled()'
.pio\build\wemos_d1_mini32\src\A.cpp.o:C:\Users\ppcm\Documents\PlatformIO\Projects\Test/.pio\libdeps\wemos_d1_mini32\TaskScheduler\src/TaskScheduler.h:458: first defined here
.pio\build\wemos_d1_mini32\src\main.cpp.o: In function `Task::getInterval()':
main.cpp:(.text._ZN4Task11getIntervalEv+0x0): multiple definition of `Task::getInterval()'
.pio\build\wemos_d1_mini32\src\A.cpp.o:A.cpp:(.text._ZN4Task11getIntervalEv+0x0): first defined here
.pio\build\wemos_d1_mini32\src\main.cpp.o: In function `Task::getIterations()':
main.cpp:(.text._ZN4Task13getIterationsEv+0x0): multiple definition of `Task::getIterations()'
.pio\build\wemos_d1_mini32\src\A.cpp.o:A.cpp:(.text._ZN4Task13getIterationsEv+0x0): first defined here
.pio\build\wemos_d1_mini32\src\main.cpp.o: In function `Task::getRunCounter()':
main.cpp:(.text._ZN4Task13getRunCounterEv+0x0): multiple definition of `Task::getRunCounter()'
.pio\build\wemos_d1_mini32\src\A.cpp.o:A.cpp:(.text._ZN4Task13getRunCounterEv+0x0): first defined here
.pio\build\wemos_d1_mini32\src\main.cpp.o: In function `Task::setCallback(void (*)())':
main.cpp:(.text._ZN4Task11setCallbackEPFvvE+0x0): multiple definition of `Task::setCallback(void (*)())'
.pio\build\wemos_d1_mini32\src\A.cpp.o:A.cpp:(.text._ZN4Task11setCallbackEPFvvE+0x0): first defined here
.pio\build\wemos_d1_mini32\src\main.cpp.o: In function `Task::setOnEnable(bool (*)())':
main.cpp:(.text._ZN4Task11setOnEnableEPFbvE+0x0): multiple definition of `Task::setOnEnable(bool (*)())'
.pio\build\wemos_d1_mini32\src\A.cpp.o:A.cpp:(.text._ZN4Task11setOnEnableEPFbvE+0x0): first defined here
.pio\build\wemos_d1_mini32\src\main.cpp.o: In function `Task::setOnDisable(void (*)())':
main.cpp:(.text._ZN4Task12setOnDisableEPFvvE+0x0): multiple definition of `Task::setOnDisable(void (*)())'
.pio\build\wemos_d1_mini32\src\A.cpp.o:A.cpp:(.text._ZN4Task12setOnDisableEPFvvE+0x0): first defined here
.pio\build\wemos_d1_mini32\src\main.cpp.o: In function `Task::reset()':
main.cpp:(.text._ZN4Task5resetEv+0x0): multiple definition of `Task::reset()'
.pio\build\wemos_d1_mini32\src\A.cpp.o:A.cpp:(.text._ZN4Task5resetEv+0x0): first defined here
[...]

This is not the complete error because it is too long, but the idea is here

Is there something wrong in the declaration of prototypes of TaskScheduler?
Thanks for your help

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions