QT linux混合编程问题, QT里编译linux源码的结构体不通过
如题.开发板提供了编译工具链,但里面没有中断接收接口,只能轮询. 我在源码里h文件里定义了一个结构体,然后在 c文件生成了它的实体,再在h文件里声明它。 在QT里include这个h文件, 然后我在里面调用了结构体的成员, 发现QT编译器无法编译这个实体- > “undefined reference to ‘实体’”。 我觉得这是对的, 因为实体是在QT外部生成的。
我这么做的目的是目前编译工具链里没有中断接收,用QT定时器接收会漏帧,因此我在源码的接收函数里定义这个实体保存接收数据,然后想在QT里调用这个实体。
请问有什么办法解决吗? 楼主用的是QT creator么,重启一下试一下! 是不是 没加extern C{} 估计是Makefile里面没有这个C源文件,需要自己添加 各位, 用的是QT creator. 我是在QT里编译的, QT不用makefile, 用的是pro文件声明. 目前用工具链里的函数都没问题, 但工具链里没有源码里的函数,它们是2套代码, 这怎么办呢? 那就要在pro里添加。pro会自动生成makefile 引用库的路径 fchen2 发表于 2018-7-9 13:06
引用库的路径
有个问题解决不了,源码里include xxx.h用的是相对路径, QT里声明要用绝对路径, 这个怎么解决? 把头文件放在qt的工程目录下面就好了。 symbol 找不到的话, link的时候没有制定对应的object(例如shared library)。 因此解决方法为指定即可。 在pro文件里加上INCLUDEPATH+=路径 C++、C混合编程,头文件。
#ifdef __cplusplus
extern "C" {
#endif 各位坛友, 这里我贴图说明一下:
我把源码里的udp2.h加进来了,右边可以看到pro文件会自动更新.
我在源码里的udp.c里定义了一个Udp_Data,然后要在QT里操作它,因此需要把这个c文件也加进来.加进来以后可以看到, 这个udp.c里的include用的都是相对地址,可以看到那些划虚线的QT无法找到, 没划虚线的起始肯定也找不到,实际上是QT在我给QT加的编译工具链里找到了同名的h文件.所以这样肯定是编译无法通过.
请问怎么办?
谢谢 为什么要把内核的源码和应用程序一起编译,udp通讯为什么不用Qt自带的QUdpSocket类来实现? yuanzhengrong 发表于 2018-7-13 08:50
为什么要把内核的源码和应用程序一起编译,udp通讯为什么不用Qt自带的QUdpSocket类来实现? ...
Qt自带的QUdpSocket还没用过, 请问支持中断接收吗? 楼主最好找本LINUX网络开发,QT网络开发之类的书看看,会比在这里咨询更快解决问题 fchen2 发表于 2018-7-15 17:12
楼主最好找本LINUX网络开发,QT网络开发之类的书看看,会比在这里咨询更快解决问题 ...
在看电子书, 是在processPendingDatagram里接收的. 改代码后试了, 板子是跟一个机器进行通信的. 机器除了发UDP数据过来外, 还会把数据保存为文件存在机器内部, 于是我把processPendingDatagram在接收到的字节数和机器里的文件字节数进行对比,发现有时候还是会漏帧.
我把processPendingDatagram收到的字节数和板子收到后保存为SD里的文件(timer里面保存) 的字节数比较, 是一样的, 说明processPendingDatagram收到的数据我都保存成功了. 感觉现在的问题是QT提供的processPendingDatagram有时候会漏帧. 这如何是好?
页:
[1]