arm-none-eabi-g++ 忽略表达式 stm32f4 中的无效字符"#"
arm-none-eabi-g++ ignoring invalid character `#' in expression stm32f4
我正在为 stm32f4 microconcroller 构建一个 makefile,其中包含所有外设库,并包含一个将 printf() 重定向到 uart 的系统调用(名称 newlib_stubs.cpp)。 在我开始将所有源代码构建到自己的对象文件中以链接到可执行文件之前,我已经编写了 makefile,以便一次性编译所有源代码,以证明 makefile 在此阶段有效但不起作用。这是生成文件:
#name of application
TARGET = main
#name of target outputs
TARGET_ELF = $(TARGET).elf
TARGET_BIN = $(TARGET).bin
TARGET_HEX = $(TARGET).hex
# directories
CODE_DIR = code/
LIBRARY_DIR = library/
BUILD_DIR = build/
SOURCE_DIR = $(CODE_DIR)src/
STARTUP_DIR = $(LIBRARY_DIR)startup/
LINKER_DIR = $(LIBRARY_DIR)linker/
PERIPHERAL_DIR = $(LIBRARY_DIR)peripherals/
DEFAULT_DIR = $(LIBRARY_DIR)default/
OUTPUT_DIR = $(BUILD_DIR)output/
OBJECT_DIR = $(BUILD_DIR)objects/
#SOURCE_MAIN_DIR = $(CODE_DIR)src/
SOURCE_LIBRARY_DIR = $(PERIPHERAL_DIR)src/
SOURCE_PERIPHERAL_DIR = $(DEFAULT_DIR)src/
# files with paths attached
_C_FILES = $(wildcard $(SOURCE_DIR)*.c) # $(wildcard $(PERIPHERAL_DIR)src/*.c)
_C_DEFAULT_FILES = $(wildcard $(DEFAULT_DIR)src/*.c)
_C_PERIPHERAL_FILES = $(wildcard $(PERIPHERAL_DIR)src/*.c)
_CPP_FILES = $(wildcard $(SOURCE_DIR)*.cpp) # $(wildcard $(PERIPHERAL_DIR)src/*.cpp)
_CPP_DEFAULT_FILES = $(wildcard $(DEFAULT_DIR)src/*.cpp)
_CPP_PERIPHERAL_FILES = $(wildcard $(PERIPHERAL_DIR)src/*.cpp)
_STA_FILES = $(wildcard $(STARTUP_DIR)*.s)
_SRC_FILES = $(_CPP_FILES) $(_C_FILES) $(_C_DEFAULT_FILES) $(_C_PERIPHERAL_FILES) $(_CPP_DEFAULT_FILES) $(_CPP_PERIPHERAL_FILES) $(_STA_FILES)
_OBJ_FILES = $(addprefix $(OBJECT_DIR),$(notdir $(_CPP_FILES:.cpp=.o)))
_OBJ_FILES += $(addprefix $(OBJECT_DIR),$(notdir $(_C_FILES:.c=.o)))
_OBJ_FILES += $(addprefix $(OBJECT_DIR),$(notdir $(_CPP_DEFAULT_FILES:.cpp=.o)))
_OBJ_FILES += $(addprefix $(OBJECT_DIR),$(notdir $(_C_DEFAULT_FILES:.c=.o)))
_OBJ_FILES += $(addprefix $(OBJECT_DIR),$(notdir $(_CPP_PERIPHERAL_FILES:.cpp=.o)))
_OBJ_FILES += $(addprefix $(OBJECT_DIR),$(notdir $(_C_PERIPHERAL_FILES:.c=.o)))
_OBJ_FILES += $(addprefix $(OBJECT_DIR),$(notdir $(_STA_FILES:.s=.o)))
_LNK_FILES = $(wildcard $(LINKER_DIR)*.ld)
#file names without paths
C_FILES = $(_C_FILES:$(SOURCE_DIR)%=%)
C_DEFAULT_FILES = $(_C_DEFAULT_FILES:$(DEFAULT_DIR)src/%=%)
C_PERIPHERAL_FILES = $(_C_PERIPHERAL_FILES:$(PERIPHERAL_DIR)src/%=%)
CPP_FILES = $(_CPP_FILES:$(SOURCE_DIR)%=%)
CPP_DEFAULT_FILES = $(_CPP_DEFAULT_FILES:$(DEFAULT_DIR)src/%=%)
CPP_PERIPHERAL_FILES = $(_CPP_PERIPHERAL_FILES:$(PERIPHERAL_DIR)src/%=%)
STA_FILES = $(_STA_FILES:$(STARTUP_DIR)%=%)
SRC_FILES = $(CPP_FILES) $(C_FILES) $(STA_FILES) $(C_DEFAULT_FILES) $(C_PERIPHERAL_FILES)
SRC_FILES += $(CPP_DEFAULT_FILES) $(CPP_PERIPHERAL_FILES)
OBJ_FILES = $(_OBJ_FILES:$(OBJECT_DIR)%=%)
#include directories
HEADERS = $(CODE_DIR)inc/
HEADERS += $(LIBRARY_DIR)default/inc/
HEADERS += $(LIBRARY_DIR)peripherals/inc/
HEADERS +=
HEADERS +=
HEADERS +=
HEADERS +=
HEADERS +=
HEADERS +=
HEADERS +=
LIB_PATH =
#libraries to link
# Tool configuration
TOOLCHAIN = arm-none-eabi-
CC = $(TOOLCHAIN)gcc
CXX = $(TOOLCHAIN)g++
AS = $(TOOLCHAIN)gcc
LD = $(TOOLCHAIN)gcc
OBJCOPY = $(TOOLCHAIN)objcopy
# Architecture configuration
ARCH_FLAGS=-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16
# gcc compiler flags
CFLAGS += -O0 -ggdb3
CFLAGS += $(ARCH_FLAGS)
CFLAGS += -flto
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections
CFLAGS += $(foreach i, $(HEADERS), -I$(i))
# g++ compiler flags
CXXFLAGS = $(CFLAGS)
CXXFLAGS += -fno-rtti -fno-exceptions
CXXFLAGS += -std=c++11
# Flags for gcc as linker
LDFLAGS=$(ARCH_FLAGS)
LDFLAGS+=-Wl,--gc-sections
LDFLAGS+=$(foreach i, $(HEADERS), -L$(i))
LDFLAGS+=-T $(LDSCRIPT)
#.PHONY print
all:
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(_SRC_FILES) -o $(TARGET_ELF)
print:
@echo name of application:
@echo TARGET = $(TARGET)
@echo name of target outputs
@echo TARGET_ELF = $(TARGET_ELF)
@echo TARGET_BIN = $(TARGET_BIN)
@echo TARGET_HEX = $(TARGET_HEX)
@echo
@echo directories
@echo CODE_DIR = $(CODE_DIR)
@echo LIBRARY_DIR = $(LIBRARY_DIR)
@echo BUILD_DIR = $(BUILD_DIR)
@echo SOURCE_DIR = $(SOURCE_DIR)
@echo STARTUP_DIR = $(STARTUP_DIR)
@echo LINKER_DIR = $(LINKER_DIR)
@echo OUTPUT_DIR = $(OUTPUT_DIR)
@echo OBJECT_DIR = $(OBJECT_DIR)
@echo
@echo files with paths attached:
@echo _C_FILES = $(_C_FILES)
@echo _C_DEFAULT_FILES = $(_C_DEFAULT_FILES)
@echo _C_PERIPHERAL_FILES = $(_C_PERIPHERAL_FILES)
@echo _CPP_FILES = $(_CPP_FILES)
@echo _CPP_DEFAULT_FILES = $(_CPP_DEFAULT_FILES)
@echo _CPP_PERIPHERAL_FILES = $(_CPP_PERIPHERAL_FILES)
@echo _STA_FILES = $(_STA_FILES)
@echo _SRC_FILES = $(_SRC_FILES)
@echo _OBJ_FILES = $(_OBJ_FILES)
@echo _LNK_FILES = $(_LNK_FILES)
@echo
@echo C_FILES = $(C_FILES)
@echo C_DEFAULT_FILES = $(C_DEFAULT_FILES)
@echo C_PERIPHERAL_FILES = $(C_PERIPHERAL_FILES)
@echo CPP_FILES = $(CPP_FILES)
@echo CPP_DEFAULT_FILES = $(CPP_DEFAULT_FILES)
@echo CPP_PERIPHERAL_FILES = $(CPP_PERIPHERAL_FILES)
@echo STA_FILES = $(STA_FILES)
@echo SRC_FILES = $(SRC_FILES)
@echo OBJ_FILES = $(OBJ_FILES)
该项目的来源可以在这里找到:https://dl.dropboxusercontent.com/u/32204435/stm324f-discovery_template_28Dec2013.zip
这是我从编译器收到的输出:
nicholas@ASUS-G74Sx:~/Development/github/stm324f-discovery_template$ make
arm-none-eabi-g++ -O0 -ggdb3 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -flto -ffunction-sections -fdata-sections -Icode/inc/ -Ilibrary/default/inc/ -Ilibrary/peripherals/inc/ -fno-rtti -fno-exceptions -std=c++11 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections -Lcode/inc/ -Llibrary/default/inc/ -Llibrary/peripherals/inc/ -T code/src/main.cpp library/default/src/stm32f4_discovery.c library/peripherals/src/misc.c library/peripherals/src/stm32f4xx_adc.c library/peripherals/src/stm32f4xx_can.c library/peripherals/src/stm32f4xx_crc.c library/peripherals/src/stm32f4xx_cryp_aes.c library/peripherals/src/stm32f4xx_cryp.c library/peripherals/src/stm32f4xx_cryp_des.c library/peripherals/src/stm32f4xx_cryp_tdes.c library/peripherals/src/stm32f4xx_dac.c library/peripherals/src/stm32f4xx_dbgmcu.c library/peripherals/src/stm32f4xx_dcmi.c library/peripherals/src/stm32f4xx_dma.c library/peripherals/src/stm32f4xx_exti.c library/peripherals/src/stm32f4xx_flash.c library/peripherals/src/stm32f4xx_fsmc.c library/peripherals/src/stm32f4xx_gpio.c library/peripherals/src/stm32f4xx_hash.c library/peripherals/src/stm32f4xx_hash_md5.c library/peripherals/src/stm32f4xx_hash_sha1.c library/peripherals/src/stm32f4xx_i2c.c library/peripherals/src/stm32f4xx_iwdg.c library/peripherals/src/stm32f4xx_pwr.c library/peripherals/src/stm32f4xx_rcc.c library/peripherals/src/stm32f4xx_rng.c library/peripherals/src/stm32f4xx_rtc.c library/peripherals/src/stm32f4xx_sdio.c library/peripherals/src/stm32f4xx_spi.c library/peripherals/src/stm32f4xx_syscfg.c library/peripherals/src/stm32f4xx_tim.c library/peripherals/src/stm32f4xx_usart.c library/peripherals/src/stm32f4xx_wwdg.c library/default/src/newlib_stubs.cpp library/default/src/stm32f4xx_it.cpp library/default/src/system_stm32f4xx.cpp library/startup/startup_stm32f4xx.s -o main.elf
/usr/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld:code/src/main.cpp:23: ignoring invalid character `#' in expression
/usr/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld:code/src/main.cpp:23: syntax error
collect2: error: ld returned 1 exit status
make: *** [all] Error 1
nicholas@ASUS-G74Sx:~/Development/github/stm324f-discovery_template$
主.cpp 行 0 到 30:
/**
******************************************************************************
* @file main.c
* @author MCD Application Team
* @version V1.0.0
* @date 18-April-2011
* @brief Main program body
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_tim.h"
#include "stm32f4xx_syscfg.h"
#include "stm32f4xx_exti.h"
#include "stm32f4xx_dma.h"
#include "misc.h"
...
我无法在主文件中识别任何错误.cpp这是它们似乎来自的地方。
此错误的大小写是什么,如何修复?
您的 Makefile 设置LDFLAGS+=-T $(LDSCRIPT)
但不定义$LDSCRIPT。这会导致调用g++ -T {nothing here} main.cpp ...
,因此链接器假定 main.cpp 是脚本。尝试从生成文件中删除LDFLAGS+=-T $(LDSCRIPT)
。
相关文章:
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- 成本字符*类型的非常量引用的无效初始化,并且来自常量字符*类型的临时引用
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 构建 NFIQ2 时从"字符"到"字符*"的转换无效
- 跨平台套接字发送,Linux 上的缓冲区常量无效* Windows上的常量字符*,最佳处理方式
- 二进制表达式的操作数无效("常量字符*"和"常量字符*")
- 答案审查 - 从"常量字符*"到"字符"的转换无效
- 从字符到康斯特* 字符的转换无效,代码有什么问题?
- 如何替换/忽略 C stdio.h getline() 中的无效 Unicode/UTF8 字符
- 如何使用ISTream对象输入多个字符到对象的数组中?(and 0作为哨兵值.下面的我的代码将无效)
- CIN是否将输入流中的无效字符取用
- 从字符 * 到 int 的转换无效
- 如何将常量无效*转换为无符号字符*
- 简短的:从字符到常量字符*的转换无效
- 用户输入逻辑运算符符号或数字,如果输入字符或字符串则无效
- 指针与无效字符合法的比较
- 验证字符串中是否存在无效字符
- XML从UnicodeString创建CData节点时出现无效字符
- arm-none-eabi-g++ 忽略表达式 stm32f4 中的无效字符"#"
- 为无效字符创建循环