-1
有没有规则我不知道有关如何将包含实际实现的C头文件链接到C++?在C++文件中使用仅C头实现的未定义符号
我有一个仅包含头文件的C文件,其中包含几个函数的完整定义。当我将此文件包含在.cpp
文件中,然后编译时,链接器报告说该文件中指定的几个函数未定义。
错误看起来是这样的:
Undefined symbols for architecture i386:
"par_shapes_free_mesh(par_shapes_mesh_s*)", referenced from:
App::testgeo() in App.o
的C文件有这个在它:
void par_shapes_free_mesh(par_shapes_mesh*); //forward declaration
void par_shapes_free_mesh(par_shapes_mesh* mesh)
{
free(mesh->points);
free(mesh->triangles);
free(mesh->normals);
free(mesh->tcoords);
free(mesh);
}
显然,功能其实是在定义。我将这个文件包含在我的App.cpp的顶部,然后使用par_shapes_free_mesh
,但它会产生这个错误。我很困惑。
我尝试以下伎俩,但它并没有区别:
#ifdef __cplusplus
extern "C" {
#endif
//and corresponding end brace
这不得不提供相同的错误消息的有趣的效果,但名称中带有下划线:
"_par_shapes_free_mesh", referenced from:
文件中也有这样的typedef:
typedef struct par_shapes_mesh_s {
float* points;
int npoints;
uint16_t* triangles;
int ntriangles;
float* normals;
float* tcoords;
} par_shapes_mesh;
我想你会知道这一点,因为你熟悉有问题的C库?我从来没有意识到我需要这个,我会尝试。 – johnbakers
不,从来没有听说过图书馆。但作为Google的备份舞者并且知道合并可能需要明确包含定义,因此不难理解。 –
好,谢谢,你钉了它。我学到了关于C库的一些东西 – johnbakers