I am trying to use my libft library that I wrote in 42 school to help me work with c strings.
The library is written fully in C99 and has no dependencies other than the standard C library
This is my file structure
When I build the project, it looks like it properly compiles the entire library, indexes it, and links it. However, I still get an error when the final compilation is done. Here’s the full log:
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 (4.2.0) > Arduino Mega or Mega 2560 ATmega2560 (Mega 2560)
HARDWARE: ATMEGA2560 16MHz, 8KB RAM, 248KB Flash
DEBUG: Current (avr-stub) External (avr-stub, simavr)
PACKAGES:
- framework-arduino-avr @ 5.1.0
- tool-avrdude @ 1.60300.200527 (6.3.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 6 compatible libraries
Scanning dependencies...
Dependency Graph
|-- ft @ 1.0.0
Building in release mode
Compiling .pio/build/megaatmega2560/src/buzzer.cpp.o
Compiling .pio/build/megaatmega2560/src/cmd.cpp.o
Compiling .pio/build/megaatmega2560/src/main.cpp.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_arradd_back.c.o
src/cmd.cpp: In constructor 'Cmd::Cmd()':
src/cmd.cpp:18:32: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
commands[0] = {"ping", ping};
^
src/cmd.cpp:19:34: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
commands[1] = {"align", align};
^
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_atoi.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_bzero.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_calloc.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_charpp_cpy.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_charpp_free.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_charpp_len.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_charpp_nfree.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_isalnum.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_isalpha.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_isascii.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_isdigit.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_isdigit_str.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_isprint.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_isspace_str.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_itoa.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstadd_back.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstadd_front.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstclear.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstdelone.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstiter.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstlast.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstmap.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstnew.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstprint.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_lstsize.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_memchr.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_memcmp.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_memcpy.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_memmove.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_memset.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_split.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strchr.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strcmp.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strdup.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_striteri.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strjoin.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strlcat.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strlcpy.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strlen.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strmapi.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strncmp.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strnstr.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strrchr.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_strtrim.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_substr.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_tolower.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/ft_toupper.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/get_next_line_bonus.c.o
Compiling .pio/build/megaatmega2560/lib3a5/ft/get_next_line_utils_bonus.c.o
Archiving .pio/build/megaatmega2560/libFrameworkArduinoVariant.a
Indexing .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
Compiling .pio/build/megaatmega2560/FrameworkArduino/IPAddress.cpp.o
Archiving .pio/build/megaatmega2560/lib3a5/libft.a
Compiling .pio/build/megaatmega2560/FrameworkArduino/PluggableUSB.cpp.o
Indexing .pio/build/megaatmega2560/lib3a5/libft.a
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
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
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
Archiving .pio/build/megaatmega2560/libFrameworkArduino.a
Indexing .pio/build/megaatmega2560/libFrameworkArduino.a
Linking .pio/build/megaatmega2560/firmware.elf
/tmp/ccdYXqHV.ltrans0.ltrans.o: In function `main':
<artificial>:(.text.startup+0x2ae): undefined reference to `ft_strnstr(char const*, char const*, unsigned int)'
collect2: error: ld returned 1 exit status
*** [.pio/build/megaatmega2560/firmware.elf] Error 1
============================================================================================================================================ [FAILED] Took 1.71 seconds ============================================================================================================================================
Here are the contents of the library.json
and platformio.ini
files:
{
"name": "ft",
"version": "1.0.0",
"build": {
"srcDir": "./src",
"includeDir": "./include"
}
}
[env:megaatmega2560]
platform = atmelavr
board = megaatmega2560
framework = arduino
lib_deps = ft
Compiling the library iself with the makefile works fine, and I can then use it with other projects without issues, and the code of the arduino project compiles without issues if I don’t call any functions from the library.
Why is this happening?