QT调用wireshark的Dll:报错Glib-CRITICAL

fengwanzk 2019-04-15 08:42:00
想使用wireshark的库进行协议解析,在QT下调用wireshark的Dll,报错:Glib-CRITICAL :g_mem_chunk_alloc:assertion 'mem_chunk != NULL' failed。

之前做过测试:
1. 在VS2005下调试通过。
2. 又在VS2010下调试通过。
3. 但是 在qt上使用相关API再写了一遍,每次到epan_dissector_run就报出该错误,除了该函数,其他调用都正常。
4. wireshark库是在VS2005下编译的。
QT是5.5.1 MSVS 2013 32bit,creator3.5.1,编译器Mingw32。
由于出错部分看起来是内存分配失败,采取了下面的措施:
1. 开始认为是设定的内存不够,因此,修改pro文件,添加:QMAKE_CXXFLAGS += -Wl, --stack,50000000,不起作用。
2. 怀疑是编译器差异导致,由于在vs下可以调用成功,因此,在vs2010下编了一个dll工程,在该工程中调用wireshark接口,然后在qt中调用该dll实现间接调用。测试还是出站相同错误。
求指教,谢谢了。



...全文
322 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengwanzk 2019-04-15
  • 打赏
  • 举报
回复
引用 1 楼 donwmufromdying 的回复:
我感觉还是版本不匹配问题。一般的不匹配有以下几种:1.32位和64位不匹配。你32位的编译不能用64位的库。2.编译器的不匹配,mingW的编译和msvc编译时不一样的。而且:vs2005和vs2013差别也很大的

主要是找不到出错的位置,所以不知道问题出在哪里。
我使用sourceinsight软件查找源码,发现只有部分地方调用了g_mem_chunk_alloc函数,如下所示:

/× Alloc the next list entry, and add it to the list.
× memory chunks have been deprecated in favor of the slice allocator,
* which has been added in 2.10.
×/
#if GLIB_CHECK_VERSION(2,10,0)
fdata = g_slice_new(frame_data);
#else
fdata = g_mem_chunk_alloc(cf-<plist_chunk);
#endif

凡是调用了g_mem_chunk_alloc的地方都出现类似上述的描述,因此,我也怀疑是使用的GLIB版本是不是在这个上面运行有些问题,毕竟qt版本还是较高的。
donwmufromdying 2019-04-15
  • 打赏
  • 举报
回复
我感觉还是版本不匹配问题。一般的不匹配有以下几种:1.32位和64位不匹配。你32位的编译不能用64位的库。2.编译器的不匹配,mingW的编译和msvc编译时不一样的。而且:vs2005和vs2013差别也很大的

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧