Неопределенная ссылка, но связанная и включенная

0

В моем проекте Eclipse C/C++ есть эта undefined reference ошибка undefined reference которая не исчезает, не имеет значения, что я делаю. Я уже изменил порядок ссылок, проверил, все ли файлы скомпилированы и включены, в основном все, что рекомендуется в Интернете, когда сталкивается с этой проблемой.

Здесь моя программа:

[...] - означает, что есть больше кода, который не связан.

menulib.h

[...]
void start_GUI( void );
[...]

start_GUI.c - Обратите внимание, что это .c -File

#include "menulib.h"


void start_GUI( void )
{
 [...]
}

coreInterface.h

#ifndef COREINTERFACE_H_
#define COREINTERFACE_H_

#include <stdint.h>
#include <stdlib.h>

#ifdef __cplusplus
/** only include the Core when compiled for C++ */
#include "Core.h"
#endif /* #ifdef CORE */

#ifdef __cplusplus
extern "C" {
#endif

void init_GUI( Core* core);

#ifdef __cplusplus
}
#endif

#endif /* COREINTERFACE_H_ */

coreInterface.cpp - Обратите внимание, что это .cpp -File

#include "coreInterface.h"
#include "menulib.h"

void init_GUI( Core* core)
{
    gui_core =  core;
    start_GUI();            // <--- **error appears here** - calls a .c file
}

Здесь ошибка в make файле (автоматически созданная из Eclipse):

g++ -L/home/PC/the_Project/menu_GUI -o "the_Project"  [...]  ./menu_GUI/coreInterface.o [...] ./menu_GUI/start_GUI.o  [...]   -lcurses
./menu_GUI/coreInterface.o: In function 'init_GUI':
/home/PC/the_Project/Default/../menu_GUI/coreInterface.cpp:23: undefined reference to 'start_GUI()'

Я считаю, что это происходит из-за слияния файлов .c и .cpp. Тем не менее я не мог решить это. У кого-нибудь есть идея?

С уважением

Теги:
linker
gcc

2 ответа

1
Лучший ответ

Рабочий пример:

#include "coreInterface.h"
extern "C" {
#include "menulib.h"
}

void init_GUI( Core* core)
{
    gui_core =  core;
    start_GUI();           
}
  • 0
    ни в коем случае не работает, я смотрел на это часами
3

Проблема заключается в том, что вы делитесь заголовком menulib.h между C и C++, не указав компилятору C++, что функция start_GUI определена в C. Используйте extern "C" в #ifdef не только для init_GUI, но и для start_GUI,

  • 0
    Если я start_GUI extern "C" { ... } в menulib.h я получаю другую ошибку: expected identifier or »(« before string constant
  • 1
    Когда вы говорите «Я получаю ошибку», всегда указывайте, где вы ее видите. В противном случае вам невозможно помочь. Так сообщается ли об ошибке при компиляции файла C или C ++?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню