leonliu_1128 发表于 2018-7-9 10:27:31

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

如题.

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

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

请问有什么办法解决吗?

eric112 发表于 2018-7-9 10:41:14

楼主用的是QT creator么,重启一下试一下!

728196 发表于 2018-7-9 11:09:33

是不是 没加extern C{}

fchen2 发表于 2018-7-9 11:18:39

估计是Makefile里面没有这个C源文件,需要自己添加

leonliu_1128 发表于 2018-7-9 11:29:54

各位, 用的是QT creator. 我是在QT里编译的, QT不用makefile, 用的是pro文件声明. 目前用工具链里的函数都没问题, 但工具链里没有源码里的函数,它们是2套代码, 这怎么办呢?

fchen2 发表于 2018-7-9 13:06:01

那就要在pro里添加。pro会自动生成makefile

fchen2 发表于 2018-7-9 13:06:50

引用库的路径

leonliu_1128 发表于 2018-7-9 13:15:47

fchen2 发表于 2018-7-9 13:06
引用库的路径

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

yuanzhengrong 发表于 2018-7-9 18:23:19

把头文件放在qt的工程目录下面就好了。

QQ373466062 发表于 2018-7-10 11:48:43

symbol 找不到的话, link的时候没有制定对应的object(例如shared library)。 因此解决方法为指定即可。

donglaile 发表于 2018-7-10 21:25:47

在pro文件里加上INCLUDEPATH+=路径

luobote55 发表于 2018-7-10 21:38:27

C++、C混合编程,头文件。
#ifdef __cplusplus
extern "C" {
#endif

leonliu_1128 发表于 2018-7-12 10:21:04

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

谢谢

yuanzhengrong 发表于 2018-7-13 08:50:40

为什么要把内核的源码和应用程序一起编译,udp通讯为什么不用Qt自带的QUdpSocket类来实现?

leonliu_1128 发表于 2018-7-13 12:47:59

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

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

fchen2 发表于 2018-7-15 17:12:07

楼主最好找本LINUX网络开发,QT网络开发之类的书看看,会比在这里咨询更快解决问题

leonliu_1128 发表于 2018-7-16 16:54:38

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

在看电子书, 是在processPendingDatagram里接收的. 改代码后试了, 板子是跟一个机器进行通信的. 机器除了发UDP数据过来外, 还会把数据保存为文件存在机器内部, 于是我把processPendingDatagram在接收到的字节数和机器里的文件字节数进行对比,发现有时候还是会漏帧.
我把processPendingDatagram收到的字节数和板子收到后保存为SD里的文件(timer里面保存) 的字节数比较, 是一样的, 说明processPendingDatagram收到的数据我都保存成功了. 感觉现在的问题是QT提供的processPendingDatagram有时候会漏帧. 这如何是好?
页: [1]
查看完整版本: QT linux混合编程问题, QT里编译linux源码的结构体不通过