Collect2: error: ld returned 1 exit status *** [.pio/build/megaatmega2560/firmware.elf] Error 1

I am new on Platformio but I try to migrate an application from Arduino IDE and I get this

Hi @adelvalle62 and welcome to this forum.
ld stands for “linker” and this is a common error when some symbols that the compiler built before somehow cannot be linked together to make an executable.
Typically, those errors are not too hard to fix, in most cases one of the following is the culprit:
Possible causes:

  • missing include guards #ifndef BLA_H #define BLA_H
  • included .cpps instead of headers (which will just copy those to the top of the file, thus will be double included)

Solutions:

  • place guards
  • make sure the headers/sources are found by the compiler and linker using build flags for external folders (not in /lib folder)
  • include headers, not the source file, to avoid double compilation and resulting linker errors

For a more detailed analysis you’d have to post the full error output. Also note, that you’re not the first one to post a topic like this, example. Please search the forum for similar issues that got a solution before posting possibly duplicate threads.
Hope this helps :wink:

I import to PlatformIO arduino project “Multiple” from DallasTemperature library.

When trying to compile, an error occurs:


C:\Users\Sheef_OSDS.platformio\packages\framework-arduino-avr\cores\arduino\wiring_digital.c: In function ‘digitalRead’:
C:\Users\Sheef_OSDS.platformio\packages\framework-arduino-avr\cores\arduino\wiring_digital.c:88:29: warning: implicit declaration of function ‘turnOffPWM’ [-Wimplicit-function-declaration]
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
^~~~~~~~~~
Archiving .pio\build\megaatmega2560\libFrameworkArduino.a
Linking .pio\build\megaatmega2560\firmware.elf
C:\Users\SHEEF_~1\AppData\Local\Temp\cckpkQXW.ltrans0.ltrans.o: In function main': <artificial>:(.text.startup+0x738): undefined reference to digitalWrite’
:(.text.startup+0x756): undefined reference to digitalWrite' <artificial>:(.text.startup+0x834): undefined reference to digitalWrite’
:(.text.startup+0x84e): undefined reference to `digitalWrite’
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\megaatmega2560\firmware.elf] Error 1

For some reason, the “wiring_digital.c” file from the arduino core library had only the “pinMode” and “digitalRead” functions, but the “turnOffPWM” and “digitalWrite” functions were missing.
After adding the missing functions from github to the wiring_digital.c file, the compilation was successful.

Can’t reproduce. Copying Multiple.pde as src\main.pde with the platformio.ini

[env:megaatmega2560]
platform = atmelavr
board = megaatmega2560
framework = arduino
lib_deps =
   https://github.com/jmchiappa/DallasTemperature.git

gives

>pio run
Processing megaatmega2560 (platform: atmelavr; board: megaatmega2560; framework: arduino)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/megaatmega2560.html
PLATFORM: Atmel AVR (3.4.0) > Arduino Mega or Mega 2560 ATmega2560 (Mega 2560)
HARDWARE: ATMEGA2560 16MHz, 8KB RAM, 248KB Flash
DEBUG: Current (avr-stub) On-board (avr-stub, simavr)
PACKAGES:
 - framework-arduino-avr 5.1.0
 - toolchain-atmelavr 1.70300.191015 (7.3.0)
Converting main.pde
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Library Manager: Installing git+https://github.com/jmchiappa/DallasTemperature.git
git version 2.29.2.windows.2
Cloning into 'C:\Users\Max\.platformio\.cache\tmp\pkg-installing-cc6rixwj'...
Library Manager: DallasTemperature @ 3.8.0+sha.aa5f497 has been installed!
Library Manager: Installing dependencies...
Library Manager: Installing OneWire
Library Manager: OneWire @ 2.3.6 has been installed!
Found 7 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <DallasTemperature> 3.8.0+sha.aa5f497
|   |-- <OneWire> 2.3.6
|-- <OneWire> 2.3.6
Building in release mode
Compiling .pio\build\megaatmega2560\src\main.pde.cpp.o
Compiling .pio\build\megaatmega2560\lib6f8\OneWire\OneWire.cpp.o
Compiling .pio\build\megaatmega2560\liba8e\DallasTemperature\DallasTemperature.cpp.o
Archiving .pio\build\megaatmega2560\libFrameworkArduinoVariant.a
Compiling .pio\build\megaatmega2560\FrameworkArduino\CDC.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\HardwareSerial0.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\HardwareSerial1.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\HardwareSerial2.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\HardwareSerial3.cpp.o
Indexing .pio\build\megaatmega2560\libFrameworkArduinoVariant.a
Compiling .pio\build\megaatmega2560\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\PluggableUSB.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\Print.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\USBCore.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\WInterrupts.c.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\WString.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\abi.cpp.o
Archiving .pio\build\megaatmega2560\lib6f8\libOneWire.a
Compiling .pio\build\megaatmega2560\FrameworkArduino\hooks.c.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\main.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\new.cpp.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\wiring.c.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\wiring_analog.c.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\wiring_digital.c.o
Indexing .pio\build\megaatmega2560\lib6f8\libOneWire.a
Archiving .pio\build\megaatmega2560\liba8e\libDallasTemperature.a
Compiling .pio\build\megaatmega2560\FrameworkArduino\wiring_pulse.S.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\megaatmega2560\FrameworkArduino\wiring_shift.c.o
Indexing .pio\build\megaatmega2560\liba8e\libDallasTemperature.a
Archiving .pio\build\megaatmega2560\libFrameworkArduino.a
Indexing .pio\build\megaatmega2560\libFrameworkArduino.a
Linking .pio\build\megaatmega2560\firmware.elf
Checking size .pio\build\megaatmega2560\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]   7.8% (used 635 bytes from 8192 bytes)
Flash: [          ]   3.2% (used 8104 bytes from 253952 bytes)
Building .pio\build\megaatmega2560\firmware.hex
=============== [SUCCESS] Took 5.86 seconds ===============

With zero errors.

You seem to have either an outdated or corrupted framework package – I recommend you delete the two folders C:\Users\<user>\.platformio\packages\framework-arduino-avr and C:\Users\<user>\.platformio\platforms\atmelavr and rebuild the project. PlatformIO will download a fresh copy of the platform then.