在我的Eclipse C / C ++项目中,出现undefined reference
错误并不会消失,并不重要。我已经更改了链接顺序,检查了是否所有文件都已编译和包含,基本上所有内容都是在互联网上推荐的,当遇到此问题时。
这是我的计划:
[...] - 意味着有更多的代码与之无关。
menulib.h
[...]
void start_GUI( void );
[...]
start_GUI.c - 请注意,这是.c
- 文件
#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
- 文件
#include "coreInterface.h"
#include "menulib.h"
void init_GUI( Core* core)
{
gui_core = core;
start_GUI(); // <--- **error appears here** - calls a .c file
}
这里是makefile中的错误(从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
文件。我还是无法解决它。有人有想法吗?
亲切的问候
答案 0 :(得分:3)
问题是您在C和C ++之间共享menulib.h标头,而没有向C ++编译器指定函数start_GUI
是在C中定义的。在#ifdef中使用extern "C"
不仅仅用于{{ 1}},也适用于init_GUI
。
答案 1 :(得分:1)
工作示例:
#include "coreInterface.h"
extern "C" {
#include "menulib.h"
}
void init_GUI( Core* core)
{
gui_core = core;
start_GUI();
}