首页| 论坛| 消息

标题:用静态Qt库编译dll
作者:lixiaoxin
日期:2017-02-28 10:58
内容:

静态编译的好处是发布exe时不用附带一堆Qt的dll了。
现在我用用到了Qt编写的一个dll,如果仍然想不附带Qt的dll,那么这个dll也要静态编译。
在pro文件中加入CONFIG+=dll,编译套件选择静态的Qt库,这样就编译出了静态的dll。
可是我调用这个dll中的某个函数时(这个函数new了一个widget),报错:QWidget: Must construct a QApplication before a QWidget。实际上我的exe里一定是构造了QApplication的,dll和exe都是release编译,而且我试了动态编译的dll和exe是可以正常用的,有哪位大神知道原因吗?


#1 [stlcours 02-28 17:22]
这个错误是指 DLL也要拥有一个自己的QApplication。但是为了保证EXE与DLL之间的消息通畅,你必须改写一下它的指针指向:dll.qapplication = exe.qapplication。
我没有用过Qt的DLL,但是见过网上文章提到过这个问题。另外,Delphi里的DLL也有一个TApplication,必须像我上面说的那样处理,才能使用,所以我估计Qt的DLL也是如此。
但如果你只是调用DLL的函数,那更简单一些,只要在Dll生成QApplication即可,不使用、不改指针对象都没关系。
#2 [steinlee 03-01 17:43]
注意: 必须要使用开源的dll,不允许静态编译。大家遵守协议
#3 回 steinlee 的帖子 [lixiaoxin 03-02 09:24]
steinlee:注意: 必须要使用开源的dll,不允许静态编译。大家遵守协议 (2017-03-01 17:43) 
静态编译的解决办法是在Qt的官方论坛找到的:
https://forum.qt.io/topic/60940/qt-static-dll-x64-using-qapplication-issues
#4 [lixiaoxin 03-02 09:25]
已解决。
参考:http://blog.csdn.net/lixiaoxin1989/article/details/59118839

回复 发表
主题 版块