• 2821阅读
  • 4回复

[提问]用静态Qt库编译dll [复制链接]

上一主题 下一主题
离线lixiaoxin
 

只看楼主 倒序阅读 楼主  发表于: 2017-02-28
静态编译的好处是发布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是可以正常用的,有哪位大神知道原因吗?
离线stlcours

只看该作者 1楼 发表于: 2017-02-28
这个错误是指 DLL也要拥有一个自己的QApplication。但是为了保证EXE与DLL之间的消息通畅,你必须改写一下它的指针指向:dll.qapplication = exe.qapplication。

我没有用过Qt的DLL,但是见过网上文章提到过这个问题。另外,Delphi里的DLL也有一个TApplication,必须像我上面说的那样处理,才能使用,所以我估计Qt的DLL也是如此。

但如果你只是调用DLL的函数,那更简单一些,只要在Dll生成QApplication即可,不使用、不改指针对象都没关系。
离线steinlee

只看该作者 2楼 发表于: 2017-03-01
注意: 必须要使用开源的dll,不允许静态编译。大家遵守协议
Looking for remote C/C++ and Qt 兼职
离线lixiaoxin

只看该作者 3楼 发表于: 2017-03-02
回 steinlee 的帖子
steinlee:注意: 必须要使用开源的dll,不允许静态编译。大家遵守协议 (2017-03-01 17:43) 

静态编译的解决办法是在Qt的官方论坛找到的:
https://forum.qt.io/topic/60940/qt-static-dll-x64-using-qapplication-issues
离线lixiaoxin

只看该作者 4楼 发表于: 2017-03-02
快速回复
限100 字节
 
上一个 下一个