嵌入式开发——用C语言调用C++的动态库时函数指针为空

问题描述

在工作中有一次定制项目,需要用在我们的嵌入式设备里集成客户的算法,我是负责将客户提供的算法SDK给集成到设备里。当我用C语言把调用算法的代码都写好并打包升级到设备里运行时,程序直接崩掉。查明原因是函数指针为空,我确认了动态库是成功加载的,那还找不到函数,我就怀疑是客户给的动态库有问题,会不会头文件和动态库对应不上,动态库里根本没有这个名字的函数。于是我用nm命令去查看动态库的符号,果然找不到头文件里声名的函数。我将问题反馈给对方,对方的研发人员也很蒙,对方说他都验证过才提供的动态库,函数调用有问题可以理解,找不到函数名就离谱。

解决方法

我仔细去排查,发现虽然找不到完全一样的函数名,但是有类似的函数名,假设头文件里声名了text()函数,会在动态库找到一个xxxtextxxx的函数名,函数名的前面和后面多出来一些,不完全一致,并且每个函数都可以找到类似的函数名。我觉得这肯定不是巧合,就去请教了公司负责算法开发的大佬,才知道这是因为对方是用C++写的程序,但是没有用exter “C”{ }括起来,导致不兼容C语言,所以我用C语言去调用会找不到函数。于是我将问题反馈给客户那边,对方将C++代码添加上exter “C”{ }再重新编译就可以了。

补充

nm命令和**exter “C”{ }**不熟悉的可以看博客:《#ifdef __cplusplus extern “C“{ #endif的作用》《查看静态库(.a)、可执行文件(.out、.o)里的符号信息–nm命令》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值