资讯详情

C++文件中调用c文件中的函数报错collect2: error: ld return xxx undefined reference

今天,当我们包装传感器插件时,出现了一个问题。将包使用cmake编译生成的方法.so文件的时候出错,collect2: error: ld return xxx undefined reference,说明函数A没有定义。实际上该函数A是在一个a.c同时定义和实现a.h声明函数A。函数A是在b.cpp同时在中调用b.h中include了a.h。

解决这个问题有两种方法:

1. 将a.c改成a.cpp

首先尝试将a.c改成了a.cpp,编译后又报错,显示flock::flock(int &,int)没有定义,所以我去找相应的头文件,一个是sys/fcntl.h。改完发现还是有错的。所以继续检查,发现C 中要使用sys/file.h这个头文件可以。所以这个头文件介绍后编译正常。

2. 在b.h中引用extern "c"引入c文件对应的头文件

不改变原始代码,直接修改b.h将#include "a.h"改成

extern "c"

{

#include "a.h"

}

通过直接编译。

通过上述过程,我们发现。我们不能直接在那里cpp文件中使用.c必须使用文件中定义的函数extern "c"引入它的目的是告诉编译器a.c使用C编译器而不是C编译器c 编译器。与此同时,它还告诉编译器环境中找到头文件,而不是c 环境中的头文件。

上述过程也表明,在linux下,c和c 环境中有许多函数是同名的,但参数可能不同,它们的位置也不同。我们必须检查具体引用哪一个。flock(int ,int)在c 中是定义在sys/file.hC中可以定义sys/fcntl.h中的。

标签: ld11传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司