Skip to content
This repository was archived by the owner on Apr 17, 2023. It is now read-only.
This repository was archived by the owner on Apr 17, 2023. It is now read-only.

Problem with linking Wire lib #43

@andrzejo

Description

@andrzejo

I have build problem with project using Wire lib:

CMakeLists.txt

cmake_minimum_required(VERSION 3.8)

set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/Arduino-Toolchain.cmake)

project(lcd LANGUAGES C CXX ASM)

get_board_id(board_id mega atmega2560)

add_arduino_executable(lcd ${board_id} src/lcd.cpp)

find_arduino_library(crystal LiquidCrystal_I2C ${board_id} 3RD_PARTY)
link_arduino_library(lcd crystal ${board_id})

src/lcd.cpp

#include <Arduino.h>

#include <LiquidCrystal_I2C.h>

#define LCD_ADDRESS     0x27
#define LCD_COLUMNS     20
#define LCD_ROWS        4

LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);

void setup() {
    Serial.begin(9600);
    lcd.begin(LCD_COLUMNS, LCD_ROWS);
    lcd.clear();
}

void loop() {
}

Library LiquidCrystal_I2C use Wire library and it should be linked to executable, but there is an linking error:

  • make
Scanning dependencies of target mega_atmega2560_core_lib
[  3%] Building C object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/WInterrupts.c.obj
[  6%] Building C object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/hooks.c.obj
[  9%] Building C object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/wiring.c.obj
[ 12%] Building C object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/wiring_analog.c.obj
[ 15%] Building C object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/wiring_digital.c.obj
[ 18%] Building C object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/wiring_pulse.c.obj
[ 21%] Building C object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/wiring_shift.c.obj
[ 25%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/CDC.cpp.obj
[ 28%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/HardwareSerial.cpp.obj
[ 31%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/HardwareSerial0.cpp.obj
[ 34%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/HardwareSerial1.cpp.obj
[ 37%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/HardwareSerial2.cpp.obj
[ 40%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/HardwareSerial3.cpp.obj
[ 43%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/IPAddress.cpp.obj
[ 46%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/PluggableUSB.cpp.obj
[ 50%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/Print.cpp.obj
[ 53%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/Stream.cpp.obj
[ 56%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/Tone.cpp.obj
[ 59%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/USBCore.cpp.obj
[ 62%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/WMath.cpp.obj
[ 65%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/WString.cpp.obj
[ 68%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/abi.cpp.obj
[ 71%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/main.cpp.obj
[ 75%] Building CXX object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/new.cpp.obj
[ 78%] Building ASM object CMakeFiles/mega_atmega2560_core_lib.dir/opt/arduino/hardware/arduino/avr/cores/arduino/wiring_pulse.S.obj
[ 81%] Linking CXX static library libmega_atmega2560_core_lib.a
[ 81%] Built target mega_atmega2560_core_lib
Scanning dependencies of target Wire
[ 84%] Building CXX object CMakeFiles/Wire.dir/opt/arduino/hardware/arduino/avr/libraries/Wire/src/Wire.cpp.obj
[ 87%] Linking CXX static library libWire.a
[ 87%] Built target Wire
Scanning dependencies of target crystal
[ 90%] Building CXX object CMakeFiles/crystal.dir/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.cpp.obj
[ 93%] Linking CXX static library libcrystal.a
[ 93%] Built target crystal
Scanning dependencies of target lcd
[ 96%] Building CXX object CMakeFiles/lcd.dir/src/lcd.cpp.obj
[100%] Linking CXX executable lcd.elf
/tmp/ccNGShVI.ltrans0.ltrans.o: In function `write':
/opt/arduino/hardware/arduino/avr/libraries/Wire/src/Wire.cpp:228: undefined reference to `twi_transmit'
/opt/arduino/hardware/arduino/avr/libraries/Wire/src/Wire.cpp:210: undefined reference to `twi_transmit'
/tmp/ccNGShVI.ltrans0.ltrans.o: In function `endTransmission':
/opt/arduino/hardware/arduino/avr/libraries/Wire/src/Wire.cpp:173: undefined reference to `twi_writeTo'
collect2: error: ld returned 1 exit status
CMakeFiles/lcd.dir/build.make:98: recipe for target 'lcd.elf' failed
make[2]: *** [lcd.elf] Error 1
CMakeFiles/Makefile2:144: recipe for target 'CMakeFiles/lcd.dir/all' failed
make[1]: *** [CMakeFiles/lcd.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

All files are available at https://github.com/andrzejo/cmake-test

Metadata

Metadata

Assignees

Labels

bugPotential bug in code

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions