X Libraries

This chapter does not contain libraries that are required to run X. It does contain libraries that enhance X. In some cases the enhancement is as simple as font support. In others it is as complex as libraries that sit between X and applications that run on X whose purpose is to standardize the look and feel and inter-process communications for different applications. They also assist programmers by supplying common elements.

Qt-3.3.3

Introduction to Qt

The Qt package contains a C++ GUI library. This is useful for creating graphical applications or executing graphical applications that are dynamically linked to the Qt library. One of the major users of Qt is KDE.

Package information

Installation of Qt

There are several ways to install a complicated package such as Qt. The files are not completely position independent. Installation procedures execute the program pkg-config to determine the location of package executables, libraries, headers, and other files. For Qt, pkg-config will look for the file lib/pkgconfig/qt-mt.pc which must be modified if relocating the package. This file is set up correctly by the build process.

The default installation places the files in /usr/local/qt/. Many commercial distributions place the files in the system's /usr hierarchy. The package can also be installed in an arbitrary directory.

This section will demonstrate two different methods.

[Note]

Note

The build time for Qt is quite long. If you want to save some time and don't want the tutorials and examples, change the first make line to:

make sub-tools

Method 1 - Installing in the /usr hierarchy

The advantage of this method is that no updates to the /etc/ld.so.conf or /etc/man.conf files are required. The package files are distributed within several subdirectories of the /usr hierarchy. This is the method that most commercial distributions use.

sed -i "s:cp -f:install:" mkspecs/linux-g++/qmake.conf &&
bash
export PATH=$PWD/bin:$PATH &&
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH &&
./configure -prefix /usr -docdir /usr/share/doc/qt \
    -headerdir /usr/include/qt -plugindir /usr/lib/qt/plugins \
    -datadir /usr/share/qt -translationdir /usr/share/qt/translations \
    -sysconfdir /etc/qt -qt-gif -system-zlib -system-libmng \
    -no-exceptions -thread -plugin-imgfmt-png \
    -system-libjpeg -system-libpng &&
find -type f -name Makefile | xargs sed -i "s@-Wl,-rpath,/usr/lib@@g" &&
make &&
make install &&
ln -sf libqt-mt.so /usr/lib/libqt.so &&
rm /usr/bin/qmake &&
install -m755 -oroot -groot qmake/qmake /usr/bin &&
cp -r doc/man /usr/share &&
cp -r examples /usr/share/doc/qt &&
exit

Method 2 - Installing in /opt

This is the method recommended by the Qt developers. It has the advantage of keeping all the package files consolidated in a dedicated directory hierarchy. By using this method, an update can be made without overwriting a previous installation and users can easily revert to a previous version by changing one symbolic link.

The Qt developers use a default location of /usr/local/qt/, however this procedure puts the files in /opt/qt-3.3.3/ and then creates a symbolic link to /opt/qt/.

bash
export QTDIR=$PWD &&
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH &&
export PATH=$PWD/bin:$PATH &&
./configure -prefix /opt/qt-3.3.3 -qt-gif -system-libpng \
    -system-libmng -system-zlib -system-libjpeg -no-exceptions \
    -thread -plugin-imgfmt-png &&
make &&
make install &&
ln -sfn qt-3.3.3 /opt/qt &&
ln -s libqt-mt.so /opt/qt/lib/libqt.so &&
rm /opt/qt-3.3.3/bin/qmake &&
install -m755 -oroot -groot qmake/qmake /opt/qt-3.3.3/bin &&
cp -r doc/man /opt/qt/doc &&
cp -r examples /opt/qt/doc
exit
[Note]

Note

If you pass the -plugin-sql-[driver] switch to the configure command, you must also pass -I[/path/to/sql/headers] so make can find the appropriate header files.

Command explanations

sed -i "s:cp -f:install:" mkspecs/linux-g++/qmake.conf: install is safer than cp when libraries are in use.

bash: This command enters a sub-shell to isolate environment changes.

export QTDIR=$PWD: This command defines where the root of the Qt directory is located.

export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH: This command allows the not yet installed Qt libraries to be used by the not yet installed Qt programs.

export PATH=$PWD/bin:$PATH: This command allows the build process to find supporting executables.

-qt-gif: This switch adds support for gif files to the libraries.

-system-zlib -system-libpng: This switch forces the build instructions to use the shared libraries that are on your system instead of creating a custom set of support libraries for these functions.

-plugin-imgfmt-png: This switch enables libpng to be linked to at runtime.

-no-exceptions: This switch disables the exceptions coding generated by the C++ compiler.

-thread: This switch adds support for multi-threading.

find -type f -name Makefile | xargs sed -i "s@-Wl,-rpath,/usr/lib@@g": This command removes hardcoded run-time paths. Otherwise, uic always tries to run with Qt libraries in /usr/lib.

ln -s libqt-mt.so /usr/lib/libqt.so: This command allows configure scripts to find a working Qt installation.

rm .../qmake; install -m755 -oroot -groot qmake/qmake .../bin: The qmake program is installed incorrectly by make install. These two commands install the program correctly.

cp -r doc/man /usr/share (or /opt/qt/doc): This command installs the man pages which are missed by make install.

cp -r examples /usr/share/doc/qt (or /opt/qt/doc): This command installs the examples which are missed by make install.

exit: This command returns to the parent shell and eliminates environment variables set earlier.

Configuring Qt

Configuration Information

If you installed Qt using Method 2, you need to update some configuration files so that Qt is correctly found by other packages and system processes.

Update the /etc/ld.so.conf and /etc/man.conf files:

cat >> /etc/ld.so.conf << "EOF"
# Begin qt addition to /etc/ld.so.conf

/opt/qt/lib

# End qt addition
EOF
ldconfig

cat >> /etc/man.conf << "EOF"
# Begin qt addition to man.conf

MANPATH /opt/qt/doc/man

# End qt addition to man.conf
EOF

Update the PKG_CONFIG_PATH environment variable in your ~/.bash_profile or /etc/profile with the following:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/qt/lib/pkgconfig

The QTDIR environment variable needs to be set when building packages that depend on Qt. Add the following to the .bash_profile initialization script for each user that builds packages using the Qt libraries. Alternatively, the variable can be set in the system wide /etc/profile file.

export QTDIR=/opt/qt

If you want the Qt executables in your shell search path, update the PATH environment variable in your ~/.bash_profile or /etc/profile to include /opt/qt/bin.

As with most libraries, there is no explicit configuration to do. After updating /etc/ld.so.conf as explained above, run /sbin/ldconfig so that ldd can find the shared libraries.

Contents

The Qt/X11 library contains APIs necessary to use programs based on the Qt GUI toolkit.

The Qt package contains assistant, designer, linguist, lrelease, lupdate, moc, qm2ts, qmake, qtconfig, uic, and the libqt-mt and libqui libraries.