Qt 5.4 on Red Hat Enterprise 5

For my job, I need to take care of the support of old Linux distributions for our products, therefore I experimented in building Qt 5.x for Red Hat Enterprise 5 (or CentOS 5 or other clones).

Whereas Red Hat Enterprise 6 works more or less out of the box, to build Qt (even with WebKit and Co.) on Red Hat Enterprise 5, more work is needed. Even the xcb library is not yet existent there.

Therefore, here a small howto, for other people having problems with building it. It contains some hacks and any input is for sure nice to have as an comment (to help others to avoid my faults).

Disclaimer: I am not responsible for creating a completely messy and buggy Qt 5.x build :=)

First, lets assume you have some CentOS 5.11 box or chroot.

You will need some new development toolsets to get rolling:

wget http://people.centos.org/tru/devtools-1.1/devtools-1.1.repo -O /etc/yum.repos.d/devtools-1.1.repo
wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo

I tend to use the version 2, version 1.1 does work, too (GCC 4.7.2 vs. 4.8.2).

We will needed EPEL, for a more up-to-date python (2.6, for xcb):

wget http://ftp.tu-chemnitz.de/pub/linux/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -i epel-release-5-4.noarch.rpm

Then, lets install the minimal deps (I install both toolsets, you can choose one):

yum install devtoolset-1.1 devtoolset-2 python26 fontconfig-devel libX11-devel libXau-devel libXext-devel libXrender-devel

Then, get some compile shell ready:

scl enable devtoolset-2 bash

I will just for excercise build Qt and stuff into /tmp/usr/(qt)?

To build Qt, you need libxcb, get that (with deps):

# package config for xcb stuff
export PKG_CONFIG_PATH=/tmp/usr/lib/pkgconfig

# xcb proto
wget http://xcb.freedesktop.org/dist/xcb-proto-1.11.tar.gz
tar -xzf xcb-proto-1.11.tar.gz
cd xcb-proto-1.11
./configure –prefix=/tmp/usr
make -j8
make install
cd ..

# pthread stubs
wget http://xcb.freedesktop.org/dist/libpthread-stubs-0.3.tar.gz
tar -xzf libpthread-stubs-0.3.tar.gz
cd libpthread-stubs-0.3
./configure –prefix=/tmp/usr
make -j8
make install
cd ..

# xcb
wget http://xcb.freedesktop.org/dist/libxcb-1.11.tar.gz
tar -xzf libxcb-1.11.tar.gz
cd libxcb-1.11
./configure –prefix=/tmp/usr
make -j8
make install
cd ..

Now we are ready to build Qt 5.4, at least some parts ;=)
I skip here the GL stuff, I don’t need it and I skip some other modules.

# unpack qt
tar -xzf qt-everywhere-opensource-src-5.4.0.tar.gz
cd qt-everywhere-opensource-src-5.4.0

# no perf events => patch that out, won’t compile, at least not for me because of missing syscall/broken kernel header
sed -i “s/#define QTESTLIB_USE_PERF_EVENTS/#undef QTESTLIB_USE_PERF_EVENTS/g” qtbase/src/testlib/qbenchmark_p.h

# configure with some defines to work on centos 5 (fake some defines)
./configure -R ‘\\\$$ORIGIN’ -D _X_INLINE=inline -D XK_dead_currency=0xfe6f -D XK_ISO_Level5_Lock=0xfe13 -D FC_WEIGHT_EXTRABLACK=215 -D FC_WEIGHT_ULTRABLACK=FC_WEIGHT_EXTRABLACK -v -opensource -confirm-license -sysconfdir /etc/xdg -prefix /tmp/usr/qt -release -shared -qt-zlib -qt-libpng -qt-libjpeg -qt-pcre -qt-xcb -qt-xkbcommon -xkb-config-root /usr/share/X11/xkb -no-xcb-xlib -c++11 -nomake examples -nomake tests -no-dbus -no-icu -no-opengl -skip activeqt -skip androidextras -skip connectivity -skip enginio -skip location -skip macextras -skip multimedia -skip quick1 -skip sensors -skip serialport -skip wayland -skip webchannel -skip webengine -skip webkit -skip webkit-examples -skip websockets -skip winextras -skip x11extras

# build and install
make -j8
make install

=> You have some Qt, but keep in mind you need to bundle at least the libxcb.so* library, as your Red Hat Enterprise 5.x guys won’t have it!

4 thoughts on “Qt 5.4 on Red Hat Enterprise 5

  1. Any ideas on how to get a version of Qt with OpenGL supported? Seems like although I have the libxcb-glx libs installed, configure does not seem to recognise xcb glx support…

    1. I was able to compile with opengl support. You need to compile some other libs, besides the ones cited above:

      ftp://xorg.mirrors.pair.com/X11R7.7/src/proto/xproto-7.0.23.tar.bz2
      http://xcb.freedesktop.org/dist/libpthread-stubs-0.3.tar.bz2
      http://xcb.freedesktop.org/dist/xcb-proto-1.11.tar.bz2
      http://xcb.freedesktop.org/dist/xcb-util-0.4.0.tar.bz2
      http://xcb.freedesktop.org/dist/xcb-util-image-0.4.0.tar.bz2
      http://xcb.freedesktop.org/dist/xcb-util-keysyms-0.4.0.tar.bz2
      http://xcb.freedesktop.org/dist/xcb-util-renderutil-0.3.9.tar.bz2
      http://xcb.freedesktop.org/dist/xcb-util-wm-0.4.1.tar.bz2
      ftp://xorg.mirrors.pair.com/X11R7.7/src/proto/xextproto-7.2.1.tar.bz2
      ftp://xorg.mirrors.pair.com/X11R7.7/src/lib/xtrans-1.2.7.tar.bz2
      ftp://xorg.mirrors.pair.com/X11R7.7/src/lib/libX11-1.5.0.tar.bz2

      If you compile on this order using the same instructions for the other libraries you should not have problems.
      Also, you need to change your configure, (specially removing -qt-xcb and adding -xcb-xlib option):

      ./configure -prefix=/tmp/usr \
      -v \
      -sysconfdir /etc/xdg \
      -I$PREFIX/include \
      -D GLX_GLXEXT_LEGACY \
      -D _X_INLINE=inline \
      -D XK_dead_currency=0xfe6f \
      -D XK_ISO_Level5_Lock=0xfe13 \
      -D FC_WEIGHT_EXTRABLACK=215 \
      -D FC_WEIGHT_ULTRABLACK=FC_WEIGHT_EXTRABLACK \
      -release \
      -opensource \
      -confirm-license \
      -shared \
      -qt-zlib \
      -qt-libpng \
      -qt-libjpeg \
      -qt-pcre \
      -qt-xkbcommon \
      -xcb \
      -xcb-xlib \
      -xkb-config-root /usr/share/X11/xkb \
      -nomake tests \
      -no-dbus \
      -no-icu \
      -no-openssl \
      -skip activeqt \
      -skip androidextras \
      -skip connectivity \
      -skip enginio \
      -skip location \
      -skip macextras \
      -skip multimedia \
      -skip quick1 \
      -skip sensors \
      -skip serialport \
      -skip wayland \
      -skip webchannel \
      -skip webengine \
      -skip webkit \
      -skip webkit-examples \
      -skip websockets \
      -skip winextras \
      -skip x11extras

  2. I forgot something:

    xtrans create a .pc file under /tmp/usr/share/pkgconfig, so before everything:

    export PKG_CONFIG_PATH=/tmp/usr/lib/pkgconfig:/tmp/usr/share/pkgconfig

    And you will need some other defines:

    -D GLX_CONTEXT_MAJOR_VERSION_ARB=0x2091 \
    -D GLX_CONTEXT_MINOR_VERSION_ARB=0x2092 \
    -D GLX_CONTEXT_DEBUG_BIT_ARB=0x00000001 \
    -D GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB=0x00000002 \
    -D GLX_CONTEXT_FLAGS_ARB=0x2094 \

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top