Bugzilla – Bug 143490
Incomplete symlinks for developing
Last modified: 2006-01-20 08:18:39 UTC
On an 64 bit system, some packages do not installing all required symlink for developing. I will one by one list there all of them, as soon as I find. The first problem is in Qt3. /usr/lib64 does not have the libqt-mt.so and libqui.so links to /usr/lib64/qt3/lib64, so all KDE applications will fail to compile if there is no --with-qt-libraries=/usr/lib64/qt3/lib64 switch passed to configure.
rpm -qpvl suse/x86_64/qt3.rpm | grep '^l' | grep so lrwxrwxrwx 1 root root 17 Jan 13 11:22 /usr/lib/qt3/lib64/libqt-mt.so.3 -> libqt-mt.so.3.3.5 lrwxrwxrwx 1 root root 17 Jan 13 11:22 /usr/lib/qt3/lib64/libqt-mt.so.3.3 -> libqt-mt.so.3.3.5 lrwxrwxrwx 1 root root 15 Jan 13 11:23 /usr/lib/qt3/lib64/libqui.so.1 -> libqui.so.1.0.0 lrwxrwxrwx 1 root root 15 Jan 13 11:23 /usr/lib/qt3/lib64/libqui.so.1.0 -> libqui.so.1.0.0 lrwxrwxrwx 1 root root 30 Jan 13 11:23 /usr/lib64/libqt-mt.so.3 -> ../lib/qt3/lib64/libqt-mt.so.3 lrwxrwxrwx 1 root root 28 Jan 13 11:23 /usr/lib64/libqui.so.1 -> ../lib/qt3/lib64/libqui.so.1
But libqt-mt.so and libqui.so is missing from your list! Linking fails in this case with "cannot find -lqt-mt".
KDE configure checks detect them correctly if you compile with --enable-libsuffix=64 its correct that there are no .so symlinks, they have been moved away in anticipation of Qt 4 (which now uses different so names, so they don't really conflict anymore). Anyway, I don't see an issue here.
what I wanted to see: if you can explain what package fails in which way on x86_64, feel free to reopen :) But we don't have special hacks in our builds and the kde configure scripts pick up libs correctly just fine.
KDE configure checks detect them correctly if you compile with --enable-libsuffix=64 This is my problem, it is required to pass an extra switch (be it what you said, or what I said). And why would I need such flags anyway? I install KDE in a separate dir where there is no mixage of 32 and 64 bit libraries, so the default /lib is fine for me. Or (as I said on kde-core-devel for another problem), the KDE configure should set lib64 to be the default on x86_64 without need of user intervention. I saw first the bug when I got this x64 system, but as I was in a hurry and I upgraded the i386 version (which officially is not supported) I just fixed by hand. Now I reinstalled SUSE, and I saw that my (already configured) builds fail. But let's take kdetoys as an example: andris@stein:~/development/sources/kde-3.5/kdetoys2> make -f Makefile.cvs This Makefile is only for the CVS repository This will be deleted before making the distribution *** YOU'RE USING UNSERMAKE. *** GOOD LUCK!! :) *** Creating acinclude.m4 *** Creating list of subdirectories *** Creating Makefile.am *** Creating configure.files *** Creating configure.in *** Creating aclocal.m4 *** Creating configure *** Creating config.h template *** Creating Makefile templates *** Creating date/time stamp *** Finished Don't forget to run ./configure If you haven't done so in a while, run ./configure --help andris@stein:~/development/sources/kde-3.5/kdetoys2> cd .. andris@stein:~/development/sources/kde-3.5> mkdir kdetoy-build andris@stein:~/development/sources/kde-3.5> cd kdetoy-build/ andris@stein:~/development/sources/kde-3.5/kdetoy-build> ../kdetoys2/configure --prefix=/opt/kde-35 checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking target system type... x86_64-unknown-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking for -p flag to install... yes checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for kde-config... /opt/kde-35/bin/kde-config checking where to install... /opt/kde-35 (as requested) checking for style of include used by make... GNU checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ANSI C... none needed checking dependency style of gcc... gcc3 checking how to run the C preprocessor... gcc -E checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking dependency style of g++... gcc3 checking whether gcc is blacklisted... no checking whether g++ supports -Wmissing-format-attribute... yes checking whether gcc supports -Wmissing-format-attribute... yes checking whether g++ supports -Wundef... yes checking whether g++ supports -Wno-long-long... yes checking whether g++ supports -Wno-non-virtual-dtor... yes checking whether g++ supports -fno-exceptions... yes checking whether g++ supports -fno-check-new... yes checking whether g++ supports -fno-common... yes checking whether g++ supports -fexceptions... yes checking how to run the C++ preprocessor... g++ -E checking whether g++ supports -O0... yes checking whether g++ supports -Wl,--no-undefined... yes checking whether g++ supports -Wl,--allow-shlib-undefined... yes not using lib directory suffix checking for a sed that does not truncate output... /usr/bin/sed checking for egrep... grep -E checking for ld used by gcc... /usr/x86_64-suse-linux/bin/ld checking if the linker (/usr/x86_64-suse-linux/bin/ld) is GNU ld... yes checking for /usr/x86_64-suse-linux/bin/ld option to reload object files... -r checking for BSD-compatible nm... /usr/bin/nm -B checking whether ln -s works... yes checking how to recognise dependent libraries... pass_all checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking dlfcn.h usability... yes checking dlfcn.h presence... yes checking for dlfcn.h... yes checking for g77... no checking for f77... no checking for xlf... no checking for frt... no checking for pgf77... no checking for fort77... no checking for fl32... no checking for af77... no checking for f90... no checking for xlf90... no checking for pgf90... no checking for epcf90... no checking for f95... no checking for fort... no checking for xlf95... no checking for ifc... no checking for efc... no checking for pgf95... no checking for lf95... no checking for gfortran... no checking whether we are using the GNU Fortran 77 compiler... no checking whether accepts -g... no checking the maximum length of command line arguments... 32768 checking command to parse /usr/bin/nm -B output from gcc object... ok checking for objdir... .libs checking for ar... ar checking for ranlib... ranlib checking for strip... strip checking if gcc static flag works... yes checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC checking if gcc PIC flag -fPIC works... yes checking if gcc supports -c -o file.o... yes checking whether the gcc linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking for shl_load... no checking for shl_load in -ldld... no checking for dlopen... no checking for dlopen in -ldl... yes checking whether a program can dlopen itself... yes checking whether a statically linked program can dlopen itself... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... no configure: creating libtool appending configuration tag "CXX" to libtool checking for ld used by g++... /usr/x86_64-suse-linux/bin/ld -m elf_x86_64 checking if the linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) is GNU ld... yes checking whether the g++ linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes checking for g++ option to produce PIC... -fPIC checking if g++ PIC flag -fPIC works... yes checking if g++ supports -c -o file.o... yes checking whether the g++ linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64) supports shared libraries... yes checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking for shl_load... (cached) no checking for shl_load in -ldld... (cached) no checking for dlopen... (cached) no checking for dlopen in -ldl... (cached) yes checking whether a program can dlopen itself... (cached) yes checking whether a statically linked program can dlopen itself... (cached) yes appending configuration tag "F77" to libtool checking for msgfmt... /usr/bin/msgfmt checking for gmsgfmt... /usr/bin/msgfmt checking for xgettext... : checking if C++ programs can be compiled... yes checking for strlcat... no checking if strlcat needs custom prototype... yes - in libkdefakes checking for strlcpy... no checking if strlcpy needs custom prototype... yes - in libkdefakes checking for main in -lutil... yes checking for main in -lcompat... no checking for crypt in -lcrypt... yes checking for socklen_t... yes checking for dnet_ntoa in -ldnet... no checking for dnet_ntoa in -ldnet_stub... no checking for inet_ntoa... yes checking for connect... yes checking for remove... yes checking for shmat... yes checking for sys/types.h... (cached) yes checking for stdint.h... (cached) yes checking sys/bitypes.h usability... yes checking sys/bitypes.h presence... yes checking for sys/bitypes.h... yes checking for poll in -lpoll... no checking Carbon/Carbon.h usability... no checking Carbon/Carbon.h presence... no checking for Carbon/Carbon.h... no checking CoreAudio/CoreAudio.h usability... no checking CoreAudio/CoreAudio.h presence... no checking for CoreAudio/CoreAudio.h... no checking if res_init needs -lresolv... yes checking for res_init... yes checking if res_init needs custom prototype... no checking for killpg in -lucb... no checking for int... yes checking size of int... 4 checking for short... yes checking size of short... 2 checking for long... yes checking size of long... 8 checking for char *... yes checking size of char *... 8 checking for dlopen in -ldl... (cached) yes checking for shl_unload in -ldld... no checking for size_t... yes checking size of size_t... 8 checking for unsigned long... yes checking size of unsigned long... 8 checking sizeof size_t == sizeof unsigned long... yes checking for PIE support... yes checking if enabling -pie/fpie support... yes checking crt_externs.h usability... no checking crt_externs.h presence... no checking for crt_externs.h... no checking for _NSGetEnviron... no checking for vsnprintf... yes checking for snprintf... yes checking for X... libraries /usr/X11R6/lib64, headers /usr/X11R6/include checking for IceConnectionNumber in -lICE... yes checking for libXext... yes checking for pthread_create in -lpthread... yes checking for extra includes... no checking for extra libs... no checking for libz... -lz checking for libpng... -lpng -lz -lm checking for libjpeg6b... no checking for libjpeg... -ljpeg checking for perl... /usr/bin/perl checking for Qt... configure: error: Qt (>= Qt 3.3 and < 4.0) (library qt-mt) not found. Please check your installation! For more details about this problem, look at the end of config.log. Make sure that you have compiled Qt with thread support! In config.log: onfigure:29754: checking for Qt configure: 29819: /usr/lib/qt3/include/qstyle.h taking that tried NO configure:29937: rm -rf SunWS_cache; g++ -o conftest -Wno-long-long -Wundef -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscr /usr/lib64/gcc/x86_64-suse-linux/4.0.2/../../../../x86_64-suse-linux/bin/ld: cannot find -lqt-mt collect2: ld returned 1 exit status configure:29940: $? = 1 And now, with the switch of course it works: andris@stein:~/development/sources/kde-3.5/kdetoy-build> ../kdetoys2/configure --prefix=/opt/kde-35 --enable-libsuffix=64 [...] checking for Qt... libraries /usr/lib/qt3/lib64, headers /usr/lib/qt3/include using -mt checking for moc... /usr/lib/qt3/bin/moc checking for uic... /usr/lib/qt3/bin/uic [...] Good - your configure finished. Start make now So, I think it is a bug.
yes, the bug is that we have no suitable autodetection for libsuffix. but I saw that you already posted a patch upstream, and I think it correctly solves this issue. agree to close it as WONTFIX here and to discuss the upstream patch until inclusion?
My patch will help KDE itself, but unfortunately not all the 3rd party KDE application, unless they sync their admin dir from the KDE SVN. But if my patch goes upstream and you really think this is not a bug in SuSE, I'm not forcing to keep the bug open.
its definitely not a suse specific problem. we can't install symlinks in /usr/lib and the configure check won't search for it in /usr/lib64. the real fix is to implement correct autochecks for libsuffix. though nobody prevents you to put m64 builds into /usr/lib, but that would be a too broken system to support it.
Just to make it clear: "we can't install symlinks in /usr/lib and the configure check won't search for it in /usr/lib64." I wanted them in /usr/lib64 and for me the configure definitely found it.