C++ Arduino编译为C++;,不是C

C++ Arduino编译为C++;,不是C,c++,c,compilation,arduino,C++,C,Compilation,Arduino,我想在Arduino上使用一个经过超级改装的伺服系统 我的草图中还没有任何实际的代码,我只是尝试编译库。我犯了很多错误 在做了一些研究之后,我发现如果我把代码编译成C而不是C++,我就不会得到这些错误。但我不知道该怎么做 我正在为Linux x64使用Arduino 1.0 @Omnifarious我的arduino草图中只有#include指令,此时为sketch\u jan20.cpp 我补充说 #ifd __cplusplus{ extern "C" #endif 这有助于消除以下错误,

我想在Arduino上使用一个经过超级改装的伺服系统

我的草图中还没有任何实际的代码,我只是尝试编译库。我犯了很多错误

在做了一些研究之后,我发现如果我把代码编译成C而不是C++,我就不会得到这些错误。但我不知道该怎么做

我正在为Linux x64使用Arduino 1.0

@Omnifarious我的arduino草图中只有#include指令,此时为
sketch\u jan20.cpp

我补充说

#ifd __cplusplus{
extern "C"
#endif
这有助于消除以下错误,除了其中一个错误:布尔值的重新定义。当我把那行注释掉时,我又犯了一大堆错误。它们都是相同的,由以下变量组成:

C:\Users\Ventrius\Programming\Arduino1.01\libraries\ArduinoApiC\/zoCommands.h:131:错误:应为“=”、“,”、“;”、”“zoCommandDoMove”之前的asm或“属性”

错误:

avr-g++-c-g-Os-Wall-fno异常-f功能部分-fdata部分-mmcu=atmega328p-DFêCPU=1600000l-DARDUINO=100-I/usr/share/arduino/cores/arduino-I/usr/share/arduino/variants/standardarduino/libraries/ArduinoApiC/tmp/build30698664083988264713.tmp/sketch\u jan20a.cpp-o/tmp/Build306986640839864713.tmp/sketch_jan20a.cpp.o
在/usr/share/arduino/libraries/ArduinoApiC/zoSmsMaster.h:4:0中包含的文件中,
从草图_jan20a.cpp:1:
/Ur/Stuts/AdUINO/库/ ArduinoApiC /ZyType:H:39:18:错误:C++内置类型BooL的重新声明
在/usr/share/arduino/libraries/ArduinoApiC/zoSmsMaster.h:5:0中包含的文件中,
从草图_jan20a.cpp:1:
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:19:29:错误:非本地函数“void zoerronit(volatile zou error*)”使用匿名类型
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:15:2:error:“typedef volatile struct ZO_error”不引用非限定类型,因此它不用于链接
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:20:27:错误:非本地函数“u08 zoerroget(volatile ZO_error*)”使用匿名类型
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:15:2:error:“typedef volatile struct ZO_error”不引用非限定类型,因此它不用于链接
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:21:44:错误:非本地函数“void zoerroput(volatile zou error*,u08)”使用匿名类型
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:15:2:error:“typedef volatile struct ZO_error”不引用非限定类型,因此它不用于链接
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:22:32:error:non-local函数“bool zoErrorIsEmpty(volatile zou error*)”使用匿名类型
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:15:2:error:“typedef volatile struct ZO_error”不引用非限定类型,因此它不用于链接
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:24:30:错误:非本地函数“u08 zoErrorGetIsr(volatile ZO_error*)”使用匿名类型
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:15:2:error:“typedef volatile struct ZO_error”不引用非限定类型,因此它不用于链接
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:25:47:错误:非本地函数“void zoerroputisr(volatile zou error*,u08)”使用匿名类型
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:15:2:error:“typedef volatile struct ZO_error”不引用非限定类型,因此它不用于链接
在/usr/share/arduino/libraries/ArduinoApiC/zoSmsMaster.h:6:0中包含的文件中,
从草图_jan20a.cpp:1:
/usr/share/arduino/libraries/ArduinoApiC/zoProtocol.h:93:26:错误:非本地函数“bool-zoProtocolCommandResponse(zou-PROTOCOL-HAL*,ZO-PROTOCOL-PACKET*,volatile-ZO-error*)”使用匿名类型
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:15:2:error:“typedef volatile struct ZO_error”不引用非限定类型,因此它不用于链接
包含在草图中的文件中。cpp:1:0:
/usr/share/arduino/libraries/ArduinoApiC/zoSmsMaster.h:55:18:警告:非局部变量“volatile zou_ERROR*zosmastererror”使用匿名类型
/usr/share/arduino/libraries/ArduinoApiC/zoError.h:15:2:警告:“typedef volatile struct ZO_ERROR”不引用非限定类型,因此它不用于链接

这个答案不是很有用,只是我试图解决这个问题的困惑性质。

将文件重命名为
.c
并使用
avr-gcc
编译它们,而不是
avr-g++

如果你有错误,那就意味着你需要调整程序,甚至可能重新编写它,以不使用任何C++特性。 < C++程序> C.

没有通用公式

另一个选项是为C++代码创建一个自己的C层来调用。这一层C代码将具有C++友好的函数定义(即no

bool
等),然后它将从Arduino库中调用非C++友好的代码


然后,您可以创建包含C层的函数定义的头文件,这些头文件包装在
extern“C”{
..
}
中。确保这些头文件不包括你所使用的ARDUIO库的任何头文件。

那么,你的代码是C还是C++?不太清楚。对我来说好像是C。为什么你要把它编译成C++?顺便说一下,ARDUIO库本身都是编译成(使用C++的特性)的。只要你的代码没有使用这些库中的任何东西,那么你就应该能够将其编译为C。@MatthewMurdoch:看起来OP是故意使用Arduino C API的头文件。is
s