В моем проекте 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
. Тем не менее я не мог решить это. У кого-нибудь есть идея?
С уважением
Рабочий пример:
#include "coreInterface.h"
extern "C" {
#include "menulib.h"
}
void init_GUI( Core* core)
{
gui_core = core;
start_GUI();
}
Проблема заключается в том, что вы делитесь заголовком menulib.h между C и C++, не указав компилятору C++, что функция start_GUI
определена в C. Используйте extern "C"
в #ifdef не только для init_GUI
, но и для start_GUI
,
start_GUI
extern "C" { ... }
в menulib.h
я получаю другую ошибку: expected identifier or »(« before string constant