未定义的引用,但链接和包含

时间:2014-08-12 12:13:17

标签: c++ c eclipse gcc linker

在我的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文件。我还是无法解决它。有人有想法吗?

亲切的问候

2 个答案:

答案 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();           
}