我正在尝试为ATmega328 micro编译一些代码,我想使用Arduino的库和核心.我正在使用CMake.我已经编译了核心库以及我的代码的所有对象和Arduino的库.但是当它链接时,它们会向我显示以下错误.
..."重定位被截断以适合:R_AVR_13_PCREL对象"......"avr5/libgcc.a"......
我通过谷歌发现这是一个常见的错误,但没有任何解决方案对我有用.我唯一不能做的是在链接器句子的末尾加上"-lm"和"-lc"标志,因为我不知道如何用CMake做到这一点.
编辑:我已经尝试使用makefile编译它,但我得到了相同的结果,甚至在链接器句子的末尾加上"-lm"和"-lc"标志.
我把Makefile和CMake文件放在这里:
CMakeList.txt主CMake文件
cmake_minimum_required(VERSION 2.6)
Project(IMU)
set(ARDUINO_PROCESSOR atmega328p)
set(ARDUINO_PROCESSOR_FREQ 1600000L)
include(./arduino.cmake)
add_library(ardlib
libraries/EEPROM/EEPROM.cpp
libraries/Wire/utility/twi.c
libraries/Wire/Wire.cpp
libraries/HMC58X3/HMC58X3
)
LINK_DIRECTORIES(${IMU_SRC_DIR}/libarduinocore
${IMU_SRC_DIR}/libraries/EEPROM
${IMU_SRC_DIR}/libraries/Wire
${IMU_SRC_DIR}/libraries/HMC58X3
)
link_libraries(arduinocore ardlib)
include_directories(
libarduinocore
libraries/EEPROM
libraries/Wire
libraries/Wire/utility
libraries/HMC58X3
)
set(C_SRCS
ADXL345.cpp
ApplicationRoutines.cpp
DCM.cpp
HMC5883L.cpp
ITG3200.cpp
matrix.cpp
output.cpp
timing.cpp
vector.cpp
)
set(C_HDRS
ADXL345.h
ApplicationRoutines.h
DCM.h
HMC5883L.h
ITG3200.h
matrix.h
output.h
timing.h
vector.h
declarations.h
)
add_executable(IMU.elf main.cpp ${C_SRCS} ${C_HDRS})
add_subdirectory(libarduinocore)
Run Code Online (Sandbox Code Playgroud)
arduino.cmake.这是由CMakeList.txt导入的:
set(ARDUINO_PROCESSOR atmega328p)
set(ARDUINO_PROCESSOR_FREQ 16000000L)
# This module defines macros …Run Code Online (Sandbox Code Playgroud)