Hello,
I think I have stumbled upon a bug but I would like to make sure I’m not generating nonsense before creating an issue and wasting contributors’ time.
I have a test project with this structure and contents
linktest/
├─ src/
│ ├─ LinkTest.cpp
│ ├─ main.cpp
│ ├─ alt.cpp
├─ include/
│ ├─ LinkTest.h
├─ platformio.ini
// LinkTest.h
class LinkTest {
private:
int anInt;
public:
LinkTest(int a);
};
// LinkTest.cpp
#include <LinkTest.h>
LinkTest::LinkTest(int a) : anInt(a) {};
// main.cpp & alt.cpp, both files have the same content
#include <Arduino.h>
#include <LinkTest.h>
void setup() {
LinkTest test(1);
}
void loop() {}
; platformio.ini
[env:main]
platform = atmelavr
board = nanoatmega328
framework = arduino
[env:test1]
platform = atmelavr
board = nanoatmega328
framework = arduino
build_src_filter =
-<alt.cpp>
+<main.cpp>
[env:test2]
platform = atmelavr
board = nanoatmega328
framework = arduino
build_src_filter =
-<main.cpp>
+<alt.cpp>
The linker fails when trying to use either the test1
or test2
environments with this trace:
Processing test1 (platform: atmelavr; board: nanoatmega328; framework: arduino)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/nanoatmega328.html
PLATFORM: Atmel AVR (4.2.0) > Arduino Nano ATmega328
HARDWARE: ATMEGA328P 16MHz, 2KB RAM, 30KB Flash
DEBUG: Current (avr-stub) External (avr-stub, simavr)
PACKAGES:
- framework-arduino-avr @ 5.1.0
- toolchain-atmelavr @ 1.70300.191015 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 5 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio\build\test1\src\main.cpp.o
Archiving .pio\build\test1\libFrameworkArduinoVariant.a
Compiling .pio\build\test1\FrameworkArduino\CDC.cpp.o
Compiling .pio\build\test1\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\test1\FrameworkArduino\HardwareSerial0.cpp.o
Compiling .pio\build\test1\FrameworkArduino\HardwareSerial1.cpp.o
Compiling .pio\build\test1\FrameworkArduino\HardwareSerial2.cpp.o
Compiling .pio\build\test1\FrameworkArduino\HardwareSerial3.cpp.o
Compiling .pio\build\test1\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\test1\FrameworkArduino\PluggableUSB.cpp.o
Compiling .pio\build\test1\FrameworkArduino\Print.cpp.o
Compiling .pio\build\test1\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\test1\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\test1\FrameworkArduino\USBCore.cpp.o
Compiling .pio\build\test1\FrameworkArduino\WInterrupts.c.o
Compiling .pio\build\test1\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\test1\FrameworkArduino\WString.cpp.o
Compiling .pio\build\test1\FrameworkArduino\abi.cpp.o
Compiling .pio\build\test1\FrameworkArduino\hooks.c.o
Compiling .pio\build\test1\FrameworkArduino\main.cpp.o
Compiling .pio\build\test1\FrameworkArduino\new.cpp.o
Compiling .pio\build\test1\FrameworkArduino\wiring.c.o
Compiling .pio\build\test1\FrameworkArduino\wiring_analog.c.o
Compiling .pio\build\test1\FrameworkArduino\wiring_digital.c.o
Compiling .pio\build\test1\FrameworkArduino\wiring_pulse.S.o
Compiling .pio\build\test1\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\test1\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\test1\libFrameworkArduino.a
Linking .pio\build\test1\firmware.elf
C:\Users\eldask\AppData\Local\Temp\ccYWOhmX.ltrans0.ltrans.o: In function `main':
<artificial>:(.text.startup+0x98): undefined reference to `LinkTest::LinkTest(int)'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\test1\firmware.elf] Error 1
I would like to know if I’m overlooking something or if this is indeed a bug related failure? Also, if I remove the contents of alt.cpp
and build with the main
environment, everything builds fine.
Thank you!