Linker 闪存溢出错误:C/C++;编译器和链接器标志

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

我正在从事一个项目,使用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 -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要么优化代码。试图解决未定义的引用错误。