QT写的程序启不来


图片描述

QT写的程序,代码跟QT库都是以MT形式去编的。为什么会这样。platform/qwindows.lib的目录也放上去了

QT C++

转子中毒-翅 11 years, 7 months ago

libEGL.dll等不添加还是不能跑,这是个陷阱,

鲸鱼的肚子 answered 11 years, 7 months ago

出现这种问题,你的Qt运行是必然不是静态编译的。有两种解决方法:
1.重新静态编译Qt
2.把qt目录下的plugins/platforms目录拷贝到程序运行目录下,让程序能找到你的dll。

whxe55 answered 11 years, 7 months ago

我记得qt默认提供的是动态库版本,你是自己编译的静态版本qt库?

Saorika answered 11 years, 7 months ago

应该是你安装的时候环境配置有点问题把 是只有这一个程序不能运行呢还是所有的Qt程序都是这样。!

N.sweet answered 11 years, 7 months ago

首先, 这个windows是插件, 大概是楼主的程序需要用到一些平台依赖.

官方提供的pre-complied Qt是以动态链接库提供的所有的库, 包括plugins. 这时, 想用插件时(或者说发布软件时)只需要程序运行的当前目录下存在名为plugins的目录, Qt就会在这个文件夹里面自动搜寻需要的插件, 然后动态加载.

但是上面的做法仅仅适用于动态库, 对于楼主自己编译的静态库, 需要有另一个做法. 静态库*.lib或者*.so脱离了编译器的话实际等于废物, 除非你自己实现解释器否则不可能在运行时动态加载(也就是说"目录放上去"不适用). 静态库引入详细的参见 Qt文档 , 我粗略说一下步骤, 建议仔细读文档:

  • 在*.pro里面加入 QTPLUGIN += qwindows
  • 在随便一个*.cpp里加入: Q_IMPORT_PLUGIN(qwindows)
    不过我试过好像在5.0+不用这段宏也能成功跑起来, 原因不明, 求高人

如果是在Visual Studio里面跑应该稍微有点不同, 但是原理是一样的, 总之*.lib需要链接进可执行文件, 而不能放在外头.

肾斗士星矢 answered 11 years, 7 months ago

Your Answer