2016-03-19 5 views
0

В настоящее время пытается построить проект в затмении. Исследователь проекта приведен ниже:неопределенная ссылка на функцию, которая уже определена

enter image description here

В cabbie.c я получаю ошибку, undefined reference to initialize..., в коде ниже:

#include <stdio.h> 
#include <stdlib.h> 
#include "../iotfclient.h" 

Iotfclient client; 
int rc; 

int main() { 
    /* Setup your example here, code that should run once 
    */ 

    rc = initialize(&client, "h7dzt2", "Edison_cabquam", "notwindows95", "token", "Over_9000"); 

    /* Code in this loop will run repeatedly 
    */ 
    for (;;) { 

    } 

    return 0; 
} 

функция уже определена в iotfclient.h, который был включен в качестве заголовка файл. Правильно ли это определить как ../iotfclient.h? Я должен сделать Makefile? Прототип функции в iotfclient.h приводится ниже:

int initialize(Iotfclient *client, char *orgId, char *deviceType, char *deviceId, char *authmethod, char *authtoken); 
/** 
* Function used to initialize the IBM Watson IoT client using the config file which is generated when you register your device 
* @param client - Reference to the Iotfclient 
* @param configFilePath - File path to the configuration file 
* 
* @return int return code 
* error codes 
* CONFIG_FILE_ERROR -3 - Config file not present or not in right format 
*/ 

Этот проект пытается соединить bluemix IOT Platform.

+0

Это ** заявлено ** в 'iotfclient.h', но где оно ** определено **? –

+0

Вы получаете предупреждение о строке #include в cabbie.c? – ItayB

+1

@ItayB Я использовал, когда это было просто '#include" iotfclient.h ". Затем я изменил его на '' ../ iotfclient.h '' –

ответ

1

initialize() является указан в iotfclient.h. Однако нет необходимости . Другими словами, компилятор знает, что идентификатор initialise обозначает функцию, но для создания программы вы также должны сообщить компоновщику, как работает функция, то есть добавить тело функции.

Попробуйте включить ../iotfclient.c.

+0

NONONO dp не будет # включать * .c файл. Исправьте расположение проекта. – user3629249

+0

@ user3629249 Вы правы, * .c файлы не предназначены для включения. Возможно, копирование соответствующего определения функции из ioftclient.c в cabbie.c будет хорошей практикой? –

0

Функция initialize является объявлен в ../iotfclient.h, это может быть определено в ../iotfclient.c, но скомпилировать этот файл и связать его с вашим проектом?

+0

Как вы это сделаете? –

+0

Можете ли вы добавить это в свой ответ? –

+0

@SharanDuggirala: не являясь пользователем eclipse, я не знаю, какую магию выполняет эта среда IDE для реализации понятия * project *. Как вы строите свою программу? Makefile, безусловно, поможет, если вы составите его и включите его в * проект *. – chqrlie

 Смежные вопросы

  • Нет связанных вопросов^_^