Qt编译库移植问题?

yang580231 2015-06-12 11:32:34
因为项目需要,在机器A上编译了64位的QT库。编译的时候加入了mysql数据库插件的编译。编译完成后,在A上可以顺利的利用qt creator进行开发,同时可以调用起mysql插件。后来将编译好的库移植到机器B上,提示qmake找不到,于是在机器B上,将qmake重新生成之后,就可以正常使用。但是在机器B上开发带mysql的项目时,总是提示plugin/sqldrivers总是提示找不到mysql的驱动,但sqldrivers之下确实存在mysql的插件,请问是不是因为编译时把机器A上的路径写入了编译环境了?那这个问题怎么解决呢?
...全文
306 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
JohnYork 2015-06-20
  • 打赏
  • 举报
回复
引用 3 楼 u014374166 的回复:
[quote=引用 2 楼 JohnYork 的回复:] 1.确保你的bin目录下有qt.conf这个文件,可以从其他的发布中拷贝; 2.可以试试qtpaths.exe更改Qt的目标路径,就在qmake.exe所在的bin目录下,但是注意新的路径明长度不能长于编译时设置的目标路径; 3.qmake.exe最好使用Qt编译时一起生成的版本,否则不知道会出些什么幺蛾子; 4.个人认为QtCore中在搜索插件的路径的选择上存在问题,QtCreator中设置的运行时环境变量QTDIR不起作用,如果你有兴趣的话可以试一试我做的补丁包(http://download.csdn.net/detail/johnyork/8790377),不过我的补丁是针对MSYS2下MinGW编译器的,如果你的编译环境不是MSYS2+MinGW-w64的话,你只有提取其中的.h和.cpp文件来手动覆盖Qt源码中的相应文件了。
我在qt的bin目录下建立了qt.conf文件,里面写入了prefix = c:/a/b ,但是我在程序中利用QLibrayInfo来查看PrefixPath的值时,其打印出来的仍然是编译qt时的路径,而不是c:/a/b,这是因为此qt.conf没有被加载么?[/quote] prefix的效果我没有仔细看过,不过一般prefix都是设置的表示当前目录的".",个人觉得没搞清楚之前最好不要随便改。 另外,貌似qt.conf主要是给qmake.exe用的,QtCore不用这个东西;从Qt源代码看插件搜索路径似乎有两个: 1.在目标程序当前路径下的plugins子目录下, 2.在QtCore内记录的Qt安装路径/plugins下 这样的安排便完全忽略了环境变量QTDIR的作用,这也是上文中我说QTDIR不起作用的原因。你在机器A上编译的64位Qt库,拷贝到机器B后,若Qt库的拷贝路径与机器A不一致,按上面给出的搜索路径当然搜索不到插件,也加载不成功了。因此可能的解决方案有3个: 1.确保机器B上的Qt库路径与机器A上的一致—— 一顿拷贝粘贴就可以测试了 2.方案1行不通的话,在机器B上打开命令行,转到Qt库下的bin目录,然后运行命令行工具qtpaths.exe来更改Qt代码库中的路径字符串(使用方法请参考该工具的命令行帮助,或者上网找教程,反正我没用过)。这个方案要求机器B上的Qt库路径不得比机器A上的路径长,否则更改会失败,至于失败的结果是不会更改还是更改导致Qt库损坏,我没试过所以不知道,因此最好做好备份 3.按我在前文中给出的第4点建议修改Qt源代码,然后重新编译Qt。这个方案最耗时,但也是最彻底的解决方案,我目前使用的Qt 5.4.2 64位库就是这么整的,到目前为止还没发现什么问题。
yang580231 2015-06-19
  • 打赏
  • 举报
回复
引用 2 楼 JohnYork 的回复:
1.确保你的bin目录下有qt.conf这个文件,可以从其他的发布中拷贝; 2.可以试试qtpaths.exe更改Qt的目标路径,就在qmake.exe所在的bin目录下,但是注意新的路径明长度不能长于编译时设置的目标路径; 3.qmake.exe最好使用Qt编译时一起生成的版本,否则不知道会出些什么幺蛾子; 4.个人认为QtCore中在搜索插件的路径的选择上存在问题,QtCreator中设置的运行时环境变量QTDIR不起作用,如果你有兴趣的话可以试一试我做的补丁包(http://download.csdn.net/detail/johnyork/8790377),不过我的补丁是针对MSYS2下MinGW编译器的,如果你的编译环境不是MSYS2+MinGW-w64的话,你只有提取其中的.h和.cpp文件来手动覆盖Qt源码中的相应文件了。
我在qt的bin目录下建立了qt.conf文件,里面写入了prefix = c:/a/b ,但是我在程序中利用QLibrayInfo来查看PrefixPath的值时,其打印出来的仍然是编译qt时的路径,而不是c:/a/b,这是因为此qt.conf没有被加载么?
JohnYork 2015-06-17
  • 打赏
  • 举报
回复
1.确保你的bin目录下有qt.conf这个文件,可以从其他的发布中拷贝; 2.可以试试qtpaths.exe更改Qt的目标路径,就在qmake.exe所在的bin目录下,但是注意新的路径明长度不能长于编译时设置的目标路径; 3.qmake.exe最好使用Qt编译时一起生成的版本,否则不知道会出些什么幺蛾子; 4.个人认为QtCore中在搜索插件的路径的选择上存在问题,QtCreator中设置的运行时环境变量QTDIR不起作用,如果你有兴趣的话可以试一试我做的补丁包(http://download.csdn.net/detail/johnyork/8790377),不过我的补丁是针对MSYS2下MinGW编译器的,如果你的编译环境不是MSYS2+MinGW-w64的话,你只有提取其中的.h和.cpp文件来手动覆盖Qt源码中的相应文件了。
yang580231 2015-06-13
  • 打赏
  • 举报
回复
难道没看见么?

16,809

社区成员

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

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