请仔细阅读以确保您理解我想做的事情。
整个main.cpp包括邪恶的有问题代码如下:
- 我确实希望Xcode能够编译,但只是为了在Xcode中进行调试。
- 我不想使用Xcode来编译或上传代码到Arduino板。我将使用Arduino IDE的“使用外部编辑器”模式。
我所做的(也作为未来可能想要做同样事情的人的参考):
- 在项目设置中(单击左窗格中的项目文件)
- 我已将编译器更改为GCC以避免许多错误。
我已将以下路径添加到Header Search Paths和Library Search Paths:
- /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/lib/gcc/avr/4.3.2/include
- /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/avr/include
- /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino
(如果您将Arduino.app安装在其他位置而不是应用程序文件夹中,则需要相应地调整路径。)
在main.cpp中,我包含了<WProgram.h>
,但这还不够。由于无法将-mmcu=somechipname
作为标志传递给编译器,导致未定义的标识符错误(对于SPCR、SPE、MSTR、SPR1、SPR0),这导致没有定义设备,avr/io.h
无法包含定义这些符号的文件。我通过手动包含适用于我的芯片的头文件<avr/iom328p.h>
来解决这个问题。
这就是我所做到的。
现在我得到了这些错误:
Undefined symbols for architecture i386:
"_init", referenced from:
_main in main.o
"_setup", referenced from:
_main in main.o
"_loop", referenced from:
_main in main.o
"_pinMode", referenced from:
SBSetup() in main.o
"_digitalWrite", referenced from:
SBSetup() in main.o
整个main.cpp包括邪恶的有问题代码如下:
#include <WProgram.h>
#include <avr/iom328p.h> // Getting around warning "device type not defined"
#define NumLEDs 25
#define clockpin 13 // CI
#define enablepin 10 // EI
#define latchpin 9 // LI
#define datapin 11 // DI
int LEDChannels[NumLEDs][3] = {0};
int SB_CommandMode;
int SB_RedCommand;
int SB_GreenCommand;
int SB_BlueCommand;
void SBSetup(void) {
pinMode(datapin, OUTPUT);
pinMode(latchpin, OUTPUT);
pinMode(enablepin, OUTPUT);
pinMode(clockpin, OUTPUT);
SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR1)|(0<<SPR0);
digitalWrite(latchpin, LOW);
digitalWrite(enablepin, LOW);
}
int main(void)
{
init();
setup();
for (;;)
loop();
return 0;
}
What do I about this?
Undefined symbols for architecture i386:
时,这意味着您正在尝试在 i386 (x86 intel) 机器上编译 AVR(或可能是ARM)代码,但它不起作用。 - Mojtaba