插件安装
百度
移植错误
c/c++混编build错误
问题现象:我用CMSIS导入一个keil5的c和c++混合编程的项目,在keil中已经编译通过并下载正常运行。但是在VS CODE中搭建好CMSIS插件环境后导入上面所述的keil5的c和c++混合编程的项目,build失败。并提示一下报错: “/Core/Src/i2c.c error: invalid argument '-std=c++11' not allowed with 'C'” “Core/Src/dma.c error: invalid argument '-std=c++11' not allowed with 'C'” 等等。
解决方式:找到.cproject.yml文件删除- -stdc++11
unknown type name 'bool'
怎么解决c和c++混合编程时,在c文件中编译出现bool错误,如下data_ring_buffer.h:46:1: error: unknown type name 'bool'
添加:#include <stdbool.h> 头文件
直接将c/c++混编 keil工程导入CMSIS出现invalid argument '-std=c++11' not allowed with 'C'
stm32f4xx_it.c
error: invalid argument '-std=c++11' not allowed with 'C'
解决办法:在.cproject.yml文件添加以下两个命令
- -xc++
- -std=c++11
c/c++混合编译.h头文件无法识别关键字class
问题现象:21.h:26:1: error: unknown type name 'class'
26 | class DF_to_CAT021
| ^
解决办法:在.cproject.yml文件添加以下两个命令
- -xc++
- -std=c++11
在 Keil 中,-xc++ 和 -std=c++11 是与 C++ 编译相关的选项。让我为您解释一下它们的含义和用法:
-xc++:
这个选项告诉编译器使用 C++ 编译器来处理源代码文件。默认情况下,Keil 使用 C 编译器,但是如果您的项目中包含 C++ 代码,您需要显式地指定 -xc++ 选项。
在 Keil 中,您可以通过以下步骤启用 C++ 编译器:
打开您的 Keil 项目。
转到 “Options for Target”(目标选项)。
在 “C/C++” 选项卡中,找到 “Misc Controls”(其他控制)。
在 “Misc Controls” 中添加 -xc++。
点击 “OK” 以保存更改。
-std=c++11:
这个选项指定了 C++ 标准的版本。在这种情况下,-std=c++11 表示使用 C++11 标准。
C++11 是 C++ 的一个版本,引入了许多新特性,例如 lambda 表达式、智能指针、范围循环等。
如果您的项目中使用了 C++11 特性,您需要在 Keil 中设置 -std=c++11 选项。
您可以按照以下步骤设置 C++11 标准:
打开您的 Keil 项目。
转到 “Options for Target”(目标选项)。
在 “C/C++” 选项卡中,找到 “Misc Controls”(其他控制)。
在 “Misc Controls” 中添加 -std=c++11。
点击 “OK” 以保存更改。
keil里面是这样:
生成的.cproject.yml原来是这样
没有 - -xc++
所以引发上面“invalid argument '-std=c++11' not allowed with 'C'”和“c/c++混合编译.h头文件无法识别关键字class”这两个错误。
project:
packs:
- pack: Keil::STM32F4xx_DFP
- pack: ARM::CMSIS@5.9.0
- pack: Keil::ARM_Compiler
setups:
- setup: Options for ADSBOUTF429ZGT6
processor:
fpu: sp
add-path:
- ../Core/Inc
- ../Drivers/STM32F4xx_HAL_Driver/Inc
- ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy
- ../Drivers/CMSIS/Device/ST/STM32F4xx/Include
- ../Drivers/CMSIS/Include
- ../User/Adsb_Out
- ../User/DF_to_CAT021
- ../User/my_Global_Lib
- ../User/easylogger/inc
debug: "on"
define:
- USE_HAL_DRIVER
- STM32F429xx
misc:
- C:
- -std=c99
C-CPP:
- -std=c++11
- -fno-rtti
- -funsigned-char
- -fshort-enums
- -fshort-wchar
- -ffunction-sections
- -Wno-packed
- -Wno-missing-variable-declarations
- -Wno-missing-prototypes
- -Wno-missing-noreturn
- -Wno-sign-conversion
- -Wno-nonportable-include-path
- -Wno-reserved-id-macro
- -Wno-unused-macros
- -Wno-documentation-unknown-command
- -Wno-documentation
- -Wno-license-management
- -Wno-parentheses-equality
CPP:
- -xc++
- -std=c++11
ASM:
- -masm=auto
Link:
- --map
- --load_addr_map_info
- --xref
- --callgraph
- --symbols
- --info sizes
- --info totals
- --info unused
- --info veneers
- --strict
- --summary_stderr
- --info summarysizes
linker: