Linker 闪存溢出错误:C/C++;编译器和链接器标志
我正在从事一个项目,使用Windows上GNU5.4.1的ST微控制器(STM32f101C8T6)Linker 闪存溢出错误:C/C++;编译器和链接器标志,linker,flash-memory,Linker,Flash Memory,我正在从事一个项目,使用Windows上GNU5.4.1的ST微控制器(STM32f101C8T6) 该软件包含C和C++源文件(C中多数)。所以我使用C和C++编译器以及链接器脚本。但不幸的是,我得到了闪存溢出错误和未定义的引用错误: "C:\Program Files (x86)/GNU Tools ARM Embedded\5.4 2016q3\bin"/arm-none-eabi-g++ -o ./obj/rel/MICRO_AO/MICRO_AO.elf -mcpu=cortex-m3
该软件包含C和C++源文件(C中多数)。所以我使用C和C++编译器以及链接器脚本。但不幸的是,我得到了闪存溢出错误和未定义的引用错误:
"C:\Program Files (x86)/GNU Tools ARM Embedded\5.4 2016q3\bin"/arm-none-eabi-g++ -o ./obj/rel/MICRO_AO/MICRO_AO.elf -mcpu=cortex-m3 -mthumb -Wl,-L./Make/ld -Wl,-static -Wl,--gc-sections -nostartfiles -Wl,-T -Xlinker ./Make/ld/STM32F101_64K_10K_FLASH.ld -Wl,-Map -Xlinker ./obj/rel/MICRO_AO/MICRO_AO.map ./obj/rel/MICRO_AO/./MICRO_BASE/main.cpp.o ./obj/rel/MICRO_AO/./MICRO_AO/AoModule.cpp.o ./obj/rel/MICRO_AO/./MICRO_BASE/Module.cpp.o ./obj/rel/MICRO_AO/./MICRO_AO/output.c.o ./obj/rel/MICRO_AO/./MICRO_AO/ioports.c.o ./obj/rel/MICRO_AO/./MICRO_AO/parameter.c.o ./obj/rel/MICRO_AO/./MICRO_AO/frontendDummy.c.o ./obj/rel/MICRO_AO/./MICRO_AO/frontendMax5134.c.o ./obj/rel/MICRO_AO/./Globals/src/stm32f10x_vector.c.o ./obj/rel/MICRO_AO/./Globals/src/max5134.c.o ./obj/rel/LibStm32f10x/LibStm32f10x.a ./obj/rel/LibGlobals/LibGlobals.a ./obj/rel/LibStm32f10x/LibStm32f10x.a ./obj/rel/LibGlobals/LibGlobals.a
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: ./obj/rel/MICRO_AO/MICRO_AO.elf section `.text' will not fit in region `FLASH'
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: section .calibdata loaded at [0800fc00,0800ffff] overlaps section .text loaded at [08002230,08014517]
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: section .ARM.extab.text.__cxa_pure_virtual loaded at [08014518,08014523] overlaps section .data loaded at [08014518,080151f7]
c:/program files (x86)/gnu tools arm embedded/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: region `FLASH' overflowed by 11492 bytes
C:\MICRO_AO\Micro_SLIO/MICRO_AO/AoModule.cpp:330: undefined reference to `AnalogProcess()'
C:\MICRO_AO\Micro_SLIO/MICRO_AO/AoModule.cpp:331: undefined reference to `Diag_Process()'
通过在internet中查找SOUTIONS,我假设错误是由于我尝试更改的链接器标志造成的。这一切似乎都不起作用。我不确定错误在哪里,应该怎么做
以下是Makefile中的编译器和链接器设置:
### Global complier and linker settings
INCLUDES_APP := -I$(GLOBALS_DIR)/inc -I$(LIBGLOBALS_DIR)/inc - I$(LIBSTM32F10X_DIR)/inc
AFLAGS :=
CFLAGS := -Wall -Wextra -Wmissing-field-initializers -Wstrict- prototypes -mcpu=cortex-m3 -mthumb -fsigned-char -g -ffunction-sections -fpic -mlittle-endian -D_FLASH_PROG
CXXFLAGS := -Wall -Wextra -Wmissing-field-initializers -mcpu=cortex-m3 -mthumb -fsigned-char -g -ffunction-sections -fno-rtti -fpic -fno-exceptions -mlittle-endian -D_FLASH_PROG
LINKER_FILE := $(LD_DIR)/STM32F101_64K_10K_FLASH.ld
LFLAGS := -mcpu=cortex-m3 -mthumb -Wl,-L$(LD_DIR) -Wl,-static -Wl,--gc-sections -nostartfiles
ifeq ($(BUILD_TYPE),$(BUILD_TYPE_DEBUG))
CFLAGS := $(CFLAGS) -O0 -g -DDEBUG
CXXFLAGS := $(CXXFLAGS) -O0 -g -DDEBUG
else
CFLAGS := $(CFLAGS) -O2 -g
CXXFLAGS := $(CXXFLAGS) -Os -g
endif
### TOOLCHAIN
COMMAND_DIR := "$(PROGRAMFILES)/GNU Tools ARM Embedded\5.4 2016q3\bin"
COMMAND_PREFIX := arm-none-eabi-
CMD_PREFIX := arm-none-eabi-
CC := $(COMMAND_DIR)/$(CMD_PREFIX)gcc
CPPC := $(COMMAND_DIR)/$(CMD_PREFIX)g++
ASM := $(COMMAND_DIR)/$(COMMAND_PREFIX)as
LINK := $(COMMAND_DIR)/$(COMMAND_PREFIX)g++
ELFBIN := $(COMMAND_DIR)/$(COMMAND_PREFIX)objcopy
AR := $(COMMAND_DIR)/$(COMMAND_PREFIX)ar
SIZE := $(COMMAND_DIR)/$(COMMAND_PREFIX)size
CP := cp
MKDIR := mkdir
RM := rm
MV := mv
SREC_CAT := $(TOOLS_DIR)/srec_cat
你的程序大概有多大?代码+只读数据的总量是否大于64K?@丹,所以我同时使用C和C++编译器以及链接器脚本。“也许你的假设(链接标志)是错误的。第一条消息非常清楚。您的程序对于设备闪存来说太大。不与C或C++编程语言有关。找一个更大的MCU或者重新设计你的代码。是的,我试着增加ld脚本的闪存大小,这样我就可以构建它了。看起来我要么需要一个更大的MCU要么优化代码。试图解决未定义的引用错误。您的程序大小大致是多少?代码+只读数据的总量是否大于64K?@丹,所以我同时使用C和C++编译器以及链接器脚本。“也许你的假设(链接标志)是错误的。第一条消息非常清楚。您的程序对于设备闪存来说太大。不与C或C++编程语言有关。找一个更大的MCU或者重新设计你的代码。是的,我试着增加ld脚本的闪存大小,这样我就可以构建它了。看起来我要么需要一个更大的MCU要么优化代码。试图解决未定义的引用错误。