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

Undefined reference, but linked and included

本文关键字:链接 包含 引用 未定义      更新时间:2023-10-16

在我的Eclipse C/c++项目中,有这个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
}

下面是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文件。我还是解不出来。有人知道吗?

亲切的问候

问题是您在C和c++之间共享menulib.h头文件,而没有向c++编译器指定start_GUI函数是在C中定义的。在#ifdef中使用extern "C"不仅用于init_GUI,还用于start_GUI

工作示例:

#include "coreInterface.h"
extern "C" {
#include "menulib.h"
}
void init_GUI( Core* core)
{
    gui_core =  core;
    start_GUI();           
}