免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6380 | 回复: 11
打印 上一主题 下一主题

qt生成的执行文件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-06 12:45 |只看该作者 |倒序浏览
我用qt生成一个执行文件,在装有qt的机器上可以运行
但在非装qt的机器上执行出错,想问一下怎样解决

我的操作环境是soloris8

在windows下编译的时候也出现过类似问题,估计是和
qt的库有关系,但我不知道怎样解决

论坛徽章:
0
2 [报告]
发表于 2004-04-06 15:12 |只看该作者

qt生成的执行文件的问题

顶一下

论坛徽章:
0
3 [报告]
发表于 2004-04-06 17:05 |只看该作者

qt生成的执行文件的问题

要想让程序在没有库的时候也能运行,你需要把库的内容静态连接到你的运行文件中,即在连接的时候加 -static 选项。

你的qt已经有了所需的动态连接库(libxxx.so.x.x.x),如果要静态连接的话,还要重新设置并编译生成相应的静态连接库(libxxx.a)。这在qt中是通过 ./configure 和 make 来实现的,就如你刚开始安装 qt 时一样。具体操作如下。

1. 设置。进入 qt 目录,在命令行上输入以下命令(也可以根据你的需要增减选项,具体选项参见 ./configure --help):

  1.   ./configure -static -thread -release
复制代码

2. 编译生成静态连接库:

  1.   make clean
  2.   make
复制代码

需要一个漫长的过程才能完成这一步。

然后你就可以 make 你的程序了。用 ldd 查看你生成的运行文件,可以发现 qt 中的库如 libqt 等不存在了,说明已经静态连接到程序中了。这样的程序应该可以在其它没有 qt 库的机器上运行了。

这样编译只是 qt 库静态连接了,但是其它的一些系统库和C++库等还是动态连接的形式。如果想让这些库也静态连接到运行文件里,应当修改你程序的 Makefile 文件,在表示程序连接选项的 LIBS 的最后加 -static,然后 make 即可。

由于 qt 中所需的动态和静态连接库都已经编译生成了,所以你以后可以通过 ./configure 方便地选择使用静态连接库还是动态连接库。configure 之后不必要象上面那样再 make 编译生成库文件了。在 configure 时建议使用 -fast 选项。
  • 使用动态连接库:./configure -shared -thread -release -fast
  • 使用静态连接库:./configure -static -thread -release -fast

论坛徽章:
0
4 [报告]
发表于 2004-04-06 21:21 |只看该作者

qt生成的执行文件的问题

就是说等于重新装一下qt来生成静态库,以便生成的执行文件可以在没有qt库的机器上运行,而在装了一次就意味着qt已经有两种库,这时候通过configure来决定使用哪种库

我是这样理解的,不知道对不对

我之前的做法是在没有qt的机器上加载一个qt带的lib库不过看了你的方法后觉得更好,明天我会去试试

论坛徽章:
0
5 [报告]
发表于 2004-04-07 09:47 |只看该作者

qt生成的执行文件的问题

你的理解是对的。

最好把你的测试情况说一下。

论坛徽章:
0
6 [报告]
发表于 2004-04-07 10:54 |只看该作者

qt生成的执行文件的问题

还在编译,弄了2个多小时了 还没完

论坛徽章:
0
7 [报告]
发表于 2004-04-07 14:53 |只看该作者

qt生成的执行文件的问题

按你所说的打好那些命令,编译完成后,确实生成了相应的静态库

接下来说一下我碰到的问题
1.我编译的源文件在qt目录下使用qmake 在make生成的执行文件使连编静态库的,在其他目录下使用qmake在make还是连接动态库的,比较奇怪我不是很懂
2.使用./configure -shared -thread -release -fast
      和./configure -static -thread -release -fast
好像并没有取得应有的效果,没有在动态和静态直接切换,所有会出现1里面出现的问题

论坛徽章:
0
8 [报告]
发表于 2004-04-07 17:29 |只看该作者

qt生成的执行文件的问题

在 qt 目录下面的目录中使用时没有问题,但是到了 qt 外面的目录中确实有上述问题存在。不知道解决的办法。

把你的 project 放到 qt 下的一个子目录中作为临时解决之策吧。

论坛徽章:
0
9 [报告]
发表于 2004-04-07 17:35 |只看该作者

qt生成的执行文件的问题

在说清楚点,在qt目录下的make生成的执行文件都带静态库,但生成不了带动态库的
其他路径下make生成的都是带动态库的,生成不了带静态库的
我当初关于在其他机器上运行执行文件的问题其实由于现在可以生成带静态库的执行文件已经解决了

但是新的问题是不知道为什么产生这种情况,这个是蛮头痛的
第二个就是关于./configure -fast在动静态模式之间转换的问题

不过还是谢谢你

论坛徽章:
0
10 [报告]
发表于 2004-04-07 19:50 |只看该作者

qt生成的执行文件的问题

第一个问题解决不了。

第二个问题,即./configure -fast在动静态模式之间转换的问题已经搞清楚怎么回事情了。不同的 configure 参数设置会导致产生不同的库。你现在使用的动态连接库是直接通过 ./configure 来设置产生的,所以你想程序使用动态连接库的时候也应该这样设置,即在 qt 目录下运行 ./configure -fast。如果用我上面给出的 ./configure -shared -thread -release -fast 的话,它设置的是带有 thread 的库(在库名上加-mt表示),而这样的动态库是不存在的,只有相应的静态连接库,所以始终是静态连接。

现在只要在 qt 目录下,你应该能自由地切换程序对库的连接方式了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP