2012-11-27 31 views
0

我有一个Qt可执行文件。 当这个程序在Ubuntu 11.04虚拟机上运行时,尽管您仍然可以告诉它是您想要的GUI,但GUI很难看。然而,当它运行在我的笔记本电脑的Ubuntu 12.04上时,一切都进展顺利。因此我猜想虚拟机的环境可能有问题。Qt程序的环境

要找出问题是否出在图书馆,我跑的命令

ldd filename 

我依赖库如下:

% Below is the output on the virtual machine  
linux-gate.so.1 => (0x00cc8000) 
libQtGui.so.4 => /opt/qt-4.7.1x86/lib/libQtGui.so.4 (0x00cc9000) 
libQtCore.so.4 => /opt/qt-4.7.1x86/lib/libQtCore.so.4 (0x00110000) 
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x003b6000) 
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x003cf000) 
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x004ba000) 
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x004e0000) 
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x004fc000) 
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0x00686000) 
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0x00695000) 
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x0065d000) 
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x007b0000) 
/lib/ld-linux.so.2 (0x00668000) 
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0x00a96000) 
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0x009ed000) 
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0x008a8000) 

% Below is the output on Ubuntu 12.04 of my laptop 
linux-gate.so.1 => (0xb776f000) 
libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0xb6c8a000) 
libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0xb69ad000) 
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6991000) 
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb68ac000) 
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6880000) 
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6862000) 
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb66bd000) 
libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb6688000) 
libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0xb666f000) 
libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb6576000) 
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb654c000) 
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb6536000) 
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb649b000) 
libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb644c000) 
libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xb6443000) 
libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xb6429000) 
libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xb6419000) 
libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xb640e000) 
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb63fc000) 
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb62c8000) 
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb62c3000) 
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb62ba000) 
/lib/ld-linux.so.2 (0xb7770000) 
libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb628f000) 
libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xb6233000) 
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb622f000) 
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb61f3000) 
libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xb61ec000) 
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xb61e5000) 
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb61c4000) 
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb61bd000) 

然后,我想知道他们怎么会不同呢?我可以通过strace等工具发现问题吗?

回答

0

程序中文本的显示太丑,不能简单地作为样式的问题。但问题的确在于构建Qt的过程。当我跑./configure,我输出的配置信息到日志文件中,发现之类的东西

88 Xinerama support ....... no 
    89 Xcursor support ........ no 
    90 Xfixes support ......... no 
    91 Xrandr support ......... no 
    92 Xrender support ........ no 
    93 Xi support ............. no 

而且,我发现了Qt的X11要求here。所以我认为问题在于缺乏这样的图书馆。幸运的是,安装后一切正常。

0

我可以看到Qt安装在11.04的/ opt中。我想这意味着你自己创造了它?这里有两个解决方案:

  1. 改为从Ubuntu的存储库安装Qt。它配备了所需的Gtk风格。 (请注意,11.04也有Qt可用;只是默认安装了12.04,而11.04不安装。)

  2. 当您构建Qt时,请确保通过传递“-gtkstyle”选项来启用Gtk样式配置脚本。您可能需要安装所有需要的Gtk开发包。

+0

这是鼓舞人心的,我会尝试。在此之前,我想知道:文档说这些样式是内置在QtGui中,那么为什么'/ opt/qt-4.7.1x86/lib/libQtGui.so.4'不起作用?而且,在Ubuntu 11.04上,即使“hello”可以显示为“h e lo”,这是否与样式有关? – beaver

+0

更重要的是,在Ubuntu 11.04上,我之前安装了Qt 4.8.2并且运行良好。但是现在,即使是那个版本也有同样的问题。我不知道该系统还有哪些其他操作,因为许多用户都可以访问该计算机。也许我应该从一个干净的系统开始? – beaver

+0

经过我的测试,可能问题出在'libQtGui.so.4'和'libQtCore.so.4'上。我也有Qt4.8.1,这可能是在安装Qt Creator时安装的。在该版本编译后,程序使用另一个路径中的库并正常工作。 – beaver