Qt程序的环境

Qt程序的环境,qt,debugging,shared-libraries,strace,ldd,Qt,Debugging,Shared Libraries,Strace,Ldd,我有一个Qt可执行文件。 当这个程序在Ubuntu11.04虚拟机上运行时,GUI是丑陋的,尽管你仍然可以看出它是你想要的GUI。然而,当它在我笔记本电脑的Ubuntu 12.04上运行时,一切都很顺利。因此,我猜虚拟机的环境可能有问题 为了找出问题是否出在库中,我运行了以下命令 ldd filename 我得到了如下库依赖项: % Below is the output on the virtual machine linux-gate.so.1 => (0x00cc8000

我有一个Qt可执行文件。 当这个程序在Ubuntu11.04虚拟机上运行时,GUI是丑陋的,尽管你仍然可以看出它是你想要的GUI。然而,当它在我笔记本电脑的Ubuntu 12.04上运行时,一切都很顺利。因此,我猜虚拟机的环境可能有问题

为了找出问题是否出在库中,我运行了以下命令

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之类的工具找出问题所在吗?

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

  • 改为从Ubuntu的存储库安装Qt。它具有所需的Gtk风格。(注意11.04也有可用的Qt;只是12.04默认安装,而11.04没有。)

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


  • 程序中文本的显示太难看了,不可能仅仅是一个风格问题。但问题确实存在于构建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
    

    此外,我还找到了满足X11要求的Qt。因此,我得出结论,问题在于缺乏这样的图书馆。幸运的是,安装后一切正常。

    这很鼓舞人心,我会试试。在此之前,我想知道:文档中说样式内置于QtGui中,那么为什么
    /opt/qt-4.7.1x86/lib/libQtGui.so.4
    不起作用呢?此外,在Ubuntu11.04上,甚至“hello”也可以显示为“He lo”,这都是关于风格的吗?更重要的是,在Ubuntu11.04上,我之前安装了Qt4.8.2,运行良好。但现在,即使是这个版本也有同样的问题。我不确定该系统还进行了哪些其他操作,因为许多用户都可以访问该计算机。也许我应该从一个干净的系统开始?在我的测试之后,也许问题在于
    libQtGui.so.4
    libQtCore.so.4
    。我还有Qt4.8.1,它可能是在安装QtCreator时安装的。按该版本编译后,程序在另一个路径中使用库,工作正常。