Eclipse CDT错误:"符号' XXX'无法解决"

时间:2013-11-18 15:31:29

标签: c eclipse eclipse-cdt

我有一个嵌入式C项目,可以在控制台上使用make构建和运行,但是Eclipse CDT给了我错误。

在main.c中,此函数使用宏APP_BUTTON_INIT:

static void buttons_init(void)
{
    static app_button_cfg_t buttons[] =
    {
        {SIGNAL_ALERT_BUTTON,           false, NRF_GPIO_PIN_NOPULL, button_event_handler},
        {BONDMNGR_DELETE_BUTTON_PIN_NO, false, NRF_GPIO_PIN_NOPULL, NULL}
    };

    APP_BUTTON_INIT(buttons, sizeof(buttons) / sizeof(buttons[0]), BUTTON_DETECTION_DELAY, false);
}

APP_BUTTON_INIT宏在app_button.h中定义如下:

#define APP_BUTTON_INIT(BUTTONS, BUTTON_COUNT, DETECTION_DELAY, USE_SCHEDULER)                     \
do                                                                                             \
{                                                                                              \
    uint32_t ERR_CODE = app_button_init((BUTTONS),                                             \
                                        (BUTTON_COUNT),                                        \
                                        (DETECTION_DELAY),                                     \
                                        (USE_SCHEDULER) ? app_button_evt_schedule : NULL);     \
    APP_ERROR_CHECK(ERR_CODE);                                                                 \
} while (0)

错误是

Symbol 'app_button_evt_schedule' could not be resolved

但是该函数在同一个头文件app_button.h中进一步定义:

static __INLINE uint32_t app_button_evt_schedule(app_button_handler_t button_handler,
                                             uint8_t              pin_no)
{
    app_button_event_t buttons_event;

    buttons_event.button_handler = button_handler;
    buttons_event.pin_no         = pin_no;

    return app_sched_event_put(&buttons_event, sizeof(buttons_event), app_button_evt_get);
}

我试过Project右键单击 - >指数 - >重建和清新所有文件,没有快乐。我正在使用带有CDT 8.2.1的Eclipse Kepler SR1。为什么Eclipse不能看到这个函数?

makefile的第一个操作是这个(这个工作):

mkdir _build
"/Users/Eliot/dev/gcc-arm/bin/arm-none-eabi-gcc" -DNRF51822_QFAA_CA -mcpu=cortex-m0 -mthumb -mabi=aapcs -DNRF51 -DBOARD_NRF6310 -DNRF51822_QFAA_CA --std=gnu99 -Wall -Werror -mfloat-abi=soft -DDEBUG -g3 -O0 -I"/Users/Eliot/dev/nrf51822/Include/ble" -I"/Users/Eliot/dev/nrf51822/Include/ble/softdevice" -I"/Users/Eliot/dev/nrf51822/Include/app_common" -I"/Users/Eliot/dev/nrf51822/Include/ble/ble_services" -I"../" -I"/Users/Eliot/dev/nrf51822/Include" -I"/Users/Eliot/dev/nrf51822/Include/gcc" -I"/Users/Eliot/dev/nrf51822/Include/ext_sensors" -M ../main.c -MF "_build/main.d" -MT _build/main.o

我的CDT项目配置包括屏幕,符号和工具链的屏幕截图如下:

https://dl.dropboxusercontent.com/u/12173473/screenshot_cdt_includes.png https://dl.dropboxusercontent.com/u/12173473/screenshot_cdt_symbols.png https://dl.dropboxusercontent.com/u/12173473/screenshot_cdt_toolchain.png

我没有使用工具链,因为我的项目最初是来自硬件制造商(Nordic Semiconductor)的样本CDT项目,该项目也没有配置工具链。说实话,我怀疑CDT找到了正确的gcc可执行文件。

2 个答案:

答案 0 :(得分:4)

您的Eclipse项目必须反映与makefile相同的行为。

make的输出(即对gcc的调用或您正在使用的任何编译器和链接器)与属性>中的Eclipse项目设置相匹配。 C / C ++ Build>设置。我将开始查看包含路径(-I)和已定义的符号(-D),然后查看其他标记。

不幸的是,Eclipse在从makefile导入项目时也不是很聪明,也不是从外部构建工具解析编译器和链接器设置。

答案 1 :(得分:0)

自应答。在没有在Eclipse中配置的适当工具链的情况下运行就是问题所在。对于使用cross gcc的ARM开发,这个Eclipse插件解决了我的问题并且看起来很有希望。它为您提供了整个工具链的Eclipse项目设置,这意味着您可以放弃makefile。

http://gnuarmeclipse.github.io