C++ 为Arduino开发的Xcode

C++ 为Arduino开发的Xcode,c++,c,xcode,arduino,undefined-symbol,C++,C,Xcode,Arduino,Undefined Symbol,请仔细阅读这篇文章,确保你明白我想做什么 我确实希望Xcode能够编译,但只有这样我才能在Xcode中调试 我不想使用Xcode编译代码或将代码上传到Arduino板。我将在“使用外部编辑器”模式下使用ArduinoIDE 我所做的(也作为将来可能想做同样事情的人的参考): 在项目设置中(单击左侧窗格中的项目文件) 我已将编译器更改为GCC以避免许多错误 我已将以下路径添加到标题搜索路径和库搜索路径: /Applications/Arduino.app/Contents/Resource

请仔细阅读这篇文章,确保你明白我想做什么

  • 我确实希望Xcode能够编译,但只有这样我才能在Xcode中调试
  • 我不想使用Xcode编译代码或将代码上传到Arduino板。我将在“使用外部编辑器”模式下使用ArduinoIDE
我所做的(也作为将来可能想做同样事情的人的参考):

  • 在项目设置中(单击左侧窗格中的项目文件)
  • 我已将编译器更改为GCC以避免许多错误
  • 我已将以下路径添加到标题搜索路径和库搜索路径:

    • /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中,我已经包含了
,但这还不够。由于无法将
-mmcu=somechipname
作为标志传递给编译器,导致没有定义任何设备,并且
avr/io.h
无法包含定义这些符号的文件,因此我收到了未定义的标识符错误(对于SPCR、SPE、MSTR、SPR1、SPR0)。我通过手动添加
来解决这个问题,这是适合我芯片的头文件

这就是我能走的路

现在我得到了这些错误:

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;
}
#包括
#包括//绕开警告“未定义设备类型”
#定义NumLEDs 25
#定义时钟引脚13//CI
#定义enablepin 10//EI
#定义锁定销9//LI
#定义datapin 11//DI
int-LEDChannels[numled][3]={0};
int SB_命令模式;
int SB_RedCommand;
int SB_绿色指挥部;
int SB_蓝司令部;
无效设置(无效){
引脚模式(数据引脚,输出);
引脚模式(锁定引脚,输出);
引脚模式(使能引脚,输出);
引脚模式(时钟引脚,输出);

SPCR=(1我认为最好的方法可能是忘记XCode,只使用ArduinoIDE

不管它值多少钱,它听起来都不像是为正确的平台(i386?)而构建的。假设您拥有用于GCC的AVR工具链,您可能会幸运地看到Arduino IDE源代码中的默认开关:

src\Compiler.java


祝你好运!

有很多人制作XCode项目模板,用于从XCode编译和上传

我刚刚添加了可以使用的版本,包括库、代码完成等,但它们在XCode 3.2中只能作为项目模板使用

我认为您仍然可以在XCode4中打开该项目,并将其用作避免错误的指南


您可以在这里找到它们:

这两个伟大的参考资料让您不仅可以为编译设置XCode,还可以为上传设置XCode:

  • 第一个解释了您需要的其他工具,而第二个提供了XCode 4.2(和以前版本)的项目模板


    我已经使用了这两种代码,而且都能正常工作。

    不,我想使用Xcode,因为Arduino IDE太糟糕了。说真的。据我所知,没有办法将avr gcc与Xcode一起使用……而且我认为我不需要它,因为从Xcode编译的代码将不会用于Arduino。另外,我发布这篇文章是因为我显然不想使用Arduino IDE。请不要告诉我直接使用它。我不是告诉你“直接使用它”。我是说Xcode可以编辑、编译、链接和调试你的(Mac?)代码;但您可能无法深入尝试强制XCode编辑、编译、链接、下载和调试Arduino代码。对于Arduino部分,您最好只使用Arduino IDE。我还说过,如果您想“强制提要”XCode,通过查看compiler.java IMHO,您可能会得到一些关于GCC编译器标志等的提示…事实上,有人刚刚让我意识到错误发生在链接时。因此代码确实会编译,这是我调试的目的。无论如何,我都会保持打开状态,因为我要到8小时后才能自行回答这个问题因为如果这些错误消失了会更好。你将无法“编译”使用Xcode进行任何操作。但是,您可以使用Xcode IDE作为高级编辑器,并在单击“在Xcode上运行”时使用独立的GCC对其进行编译/上载,而无需其他操作。您无法将LLDB附加到Arduino以进行调试。另外,请记住,当您看到此
    未定义的架构i386符号时:
    意味着您无法使用它试图在i386(x86英特尔)机器上编译AVR(或者ARM)代码,这根本不起作用。