我正在尝试声明一个可通过不同的*.c文件访问的全局函数。
我已经在param.hxx中声明了它,在param.cxx中定义了它,我想在compute_grid.c中访问它。
不幸的是,在编译过程中,我遇到了以下错误:
compute_grid.c:(.text+0x5) : undefined reference to « grid_create »
我对C中的函数声明不是很熟悉。实际上,我正在构建一个大程序的模块部分,我从另一个看起来有效的代码文件中复制了这些声明。
不幸的是,该计划是非常机密的,我不能访问所有的来源,但我会尽我最大的努力给你过期的部分…
param.hxx:
typedef struct grid_t
{
int *test;
} grid_t;
void
grid_create(void);
extern grid_t *grid;
param.cxx:
#include <malloc.h>
#include "param.hxx"
grid_t *grid;
void grid_create(void)
{
grid = (grid_t*)malloc(sizeof(grid_t));
grid->test = (int*)malloc(sizeof(int));
*grid->test = 123;
}
compute_grid.c:
#include "param.hxx"
void
compute_grid()
{
grid_create();
return;
}
感谢您的帮助!
发布于 2018-12-20 02:38:33
.cxx
是用于C++文件的扩展名之一。您的编译器可能正在使用文件的扩展名将源代码编译为C++。编译C文件时,它会生成对C符号grid_create
的未解析引用,但已编译的C++文件将grid_create
定义为C++符号。因此,链接器将保留对grid_create
的C符号引用未解析,因为只有一个C++符号与void grid_create(void)
关联。
您可以尝试保护头文件,以便C++编译器生成C符号而不是C++符号。
#ifdef __cplusplus
extern "C" {
#endif
void
grid_create(void);
#ifdef __cplusplus
}
#endif
https://stackoverflow.com/questions/53857272
复制相似问题