搜索
bottom↓
回复: 16

QT linux混合编程问题, QT里编译linux源码的结构体不通过

[复制链接]

出0入0汤圆

发表于 2018-7-9 10:27:31 | 显示全部楼层 |阅读模式
如题.

开发板提供了编译工具链,但里面没有中断接收接口,只能轮询. 我在源码里h文件里定义了一个结构体,然后在 c文件生成了它的实体,再在h文件里声明它。 在QT里include这个h文件, 然后我在里面调用了结构体的成员, 发现QT编译器无法编译这个实体- > “undefined reference to ‘实体’”。 我觉得这是对的, 因为实体是在QT外部生成的。

我这么做的目的是目前编译工具链里没有中断接收,用QT定时器接收会漏帧,因此我在源码的接收函数里定义这个实体保存接收数据,然后想在QT里调用这个实体。

请问有什么办法解决吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-7-9 10:41:14 | 显示全部楼层
楼主用的是QT creator么,重启一下试一下!

出0入0汤圆

发表于 2018-7-9 11:09:33 | 显示全部楼层
是不是 没加  extern C{}

出60入0汤圆

发表于 2018-7-9 11:18:39 | 显示全部楼层
估计是Makefile里面没有这个C源文件,需要自己添加

出0入0汤圆

 楼主| 发表于 2018-7-9 11:29:54 | 显示全部楼层
各位, 用的是QT creator. 我是在QT里编译的, QT不用makefile, 用的是pro文件声明. 目前用工具链里的函数都没问题, 但工具链里没有源码里的函数,它们是2套代码, 这怎么办呢?

出60入0汤圆

发表于 2018-7-9 13:06:01 来自手机 | 显示全部楼层
那就要在pro里添加。pro会自动生成makefile

出60入0汤圆

发表于 2018-7-9 13:06:50 来自手机 | 显示全部楼层
引用库的路径

出0入0汤圆

 楼主| 发表于 2018-7-9 13:15:47 | 显示全部楼层

有个问题解决不了,源码里include xxx.h用的是相对路径, QT里声明要用绝对路径, 这个怎么解决?

出0入0汤圆

发表于 2018-7-9 18:23:19 | 显示全部楼层
把头文件放在qt的工程目录下面就好了。

出0入0汤圆

发表于 2018-7-10 11:48:43 | 显示全部楼层
symbol 找不到的话, link的时候没有制定对应的object(例如shared library)。 因此解决方法为指定即可。

出0入0汤圆

发表于 2018-7-10 21:25:47 来自手机 | 显示全部楼层
在pro文件里加上INCLUDEPATH+=路径

出0入0汤圆

发表于 2018-7-10 21:38:27 | 显示全部楼层
C++、C混合编程,头文件。
#ifdef __cplusplus
  extern "C" {
  #endif  

出0入0汤圆

 楼主| 发表于 2018-7-12 10:21:04 | 显示全部楼层
各位坛友, 这里我贴图说明一下:
我把源码里的udp2.h加进来了,右边可以看到pro文件会自动更新.
我在源码里的udp.c里定义了一个Udp_Data,然后要在QT里操作它,因此需要把这个c文件也加进来.加进来以后可以看到, 这个udp.c里的include用的都是相对地址,可以看到那些划虚线的QT无法找到, 没划虚线的起始肯定也找不到,实际上是QT在我给QT加的编译工具链里找到了同名的h文件.所以这样肯定是编译无法通过.
请问怎么办?

谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-7-13 08:50:40 | 显示全部楼层
为什么要把内核的源码和应用程序一起编译,udp通讯为什么不用Qt自带的QUdpSocket类来实现?

出0入0汤圆

 楼主| 发表于 2018-7-13 12:47:59 | 显示全部楼层
yuanzhengrong 发表于 2018-7-13 08:50
为什么要把内核的源码和应用程序一起编译,udp通讯为什么不用Qt自带的QUdpSocket类来实现? ...

Qt自带的QUdpSocket还没用过, 请问支持中断接收吗?

出60入0汤圆

发表于 2018-7-15 17:12:07 | 显示全部楼层
楼主最好找本LINUX网络开发,QT网络开发之类的书看看,会比在这里咨询更快解决问题

出0入0汤圆

 楼主| 发表于 2018-7-16 16:54:38 | 显示全部楼层
fchen2 发表于 2018-7-15 17:12
楼主最好找本LINUX网络开发,QT网络开发之类的书看看,会比在这里咨询更快解决问题 ...

在看电子书, 是在processPendingDatagram里接收的. 改代码后试了, 板子是跟一个机器进行通信的. 机器除了发UDP数据过来外, 还会把数据保存为文件存在机器内部, 于是我把processPendingDatagram在接收到的字节数和机器里的文件字节数进行对比,发现有时候还是会漏帧.
我把processPendingDatagram收到的字节数和板子收到后保存为SD里的文件(timer里面保存) 的字节数比较, 是一样的, 说明processPendingDatagram收到的数据我都保存成功了. 感觉现在的问题是QT提供的processPendingDatagram有时候会漏帧. 这如何是好?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 22:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表