我试图声明一个可以通过不同的* .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;
}
谢谢您的帮助!
答案 0 :(得分:2)
<paper-dialog>
是用于C ++文件的扩展名之一。您的编译器可能正在使用文件扩展名将源代码编译为C ++。编译C文件时,它将生成对C符号.cxx
的未解析引用,但是编译后的C ++文件将grid_create
定义为C ++符号。因此,链接器将保留对grid_create
的C符号引用的解析,因为只有一个与grid_create
相关联的C ++符号。
您可以尝试保护标头文件,以便C ++编译器将生成C符号而不是C ++符号。
void grid_create(void)