Version: (using KDE 4.0.0) Installed from: Gentoo Packages Compiler: GCC i686-pc-linux-gnu-4.2.2 CFLAGS="-O2 -march=prescott -pipe -fomit-frame-pointer -msse3 -funroll-loops" OS: Linux I have been attempting to compile kdelibs-4.0.0 on my system, and it fails at the same point with very little debug output. Reproducible: Always Actual Results: <--- snip ---> [ 4] Linking CXX shared library ../lib/libkjs.so [ 4%] Building CXX object solid/solid/CMakeFiles/solid.dir/device.o /var/tmp/portage/kde-base/kdelibs-4.0.0/work/kdelibs-4.0.0/solid/solid/device.cpp: In member function 'const Solid::DeviceInterface* Solid::Device::asDeviceInterface(const Solid::DeviceInterface::Type&) const': /var/tmp/portage/kde-base/kdelibs-4.0.0/work/kdelibs-4.0.0/solid/solid/device.cpp:162: warning: enumeration value 'Last' not handled in switch [ 5%] Building CXX object solid/solid/CMakeFiles/solid.dir/devicemanager.o Building CXX object kdecore/CMakeFiles/kdecore.dir/config/kconfigbase.o [ 5%] /usr/lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../i686-pc-linux-gnu/bin/ld: warning: creating a DT_TEXTREL in object. collect2: ld returned 1 exit status Building CXX object solid/solid/CMakeFiles/solid.dir/deviceinterface.o make[2]: *** [lib/libkjs.so.4.0.0] Error 1 make[1]: *** [kjs/CMakeFiles/kjs.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... <--- snip ---> <--- snip ---> [ 17%] Building C object kdecore/CMakeFiles/kdecore.dir/fakes.o Linking CXX shared library ../lib/libkdecore.so [ 17%] Built target kdecore make: *** [all] Error 2 * * ERROR: kde-base/kdelibs-4.0.0 failed. * Call stack: * ebuild.sh, line 46: Called src_compile * environment, line 2505: Called kde4-base_src_compile * environment, line 1804: Called kde4-base_src_make * environment, line 1834: Called cmake-utils_src_make * environment, line 637: Called die * The specific snippet of code: * emake "$@" || diefunc "$FUNCNAME" "$LINENO" "$?" "Make failed!"; * The die message: * Make failed! * * If you need support, post the topmost build error, and the call stack if relevant. * A complete build log is located at '/var/log/portage/kde-base:kdelibs-4.0.0:20080121-142926.log'. * The ebuild environment file is located at '/var/tmp/portage/kde-base/kdelibs-4.0.0/temp/environment'. * <--- snip ---> Expected Results: kdelibs should have compiled.
Created attachment 23345 [details] Build log.
(Useful for Gentoo debugging, too) # emerge --info Portage 2.1.4 (default-linux/x86/2007.0/desktop, gcc-4.2.2, glibc-2.7-r1, 2.6.23-tuxonice-r9 i686) ================================================================= System uname: 2.6.23-tuxonice-r9 i686 Genuine Intel(R) CPU T2400 @ 1.83GHz Timestamp of tree: Tue, 29 Jan 2008 04:16:01 +0000 distcc 2.18.3 i686-pc-linux-gnu (protocols 1 and 2) (default port 3632) [disabled] ccache version 2.4 [enabled] app-shells/bash: 3.2_p33 dev-java/java-config: 1.3.7, 2.1.3 dev-lang/python: 2.4.4-r4, 2.5.1-r5 dev-python/pycrypto: 2.0.1-r6 dev-util/ccache: 2.4-r7 sys-apps/baselayout: 1.12.11.1 sys-apps/sandbox: 1.2.18.1-r2 sys-devel/autoconf: 2.13, 2.61-r1 sys-devel/automake: 1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10.1 sys-devel/binutils: 2.18-r1 sys-devel/gcc-config: 1.4.0-r4 sys-devel/libtool: 1.5.24 virtual/os-headers: 2.6.23-r3 ACCEPT_KEYWORDS="x86 ~x86" CBUILD="i686-pc-linux-gnu" CFLAGS="-O2 -march=prescott -pipe -fomit-frame-pointer -msse3 -funroll-loops" CHOST="i686-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/config" CONFIG_PROTECT_MASK="/etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/php/apache2-php5/ext-active/ /etc/php/cgi-php5/ext-active/ /etc/php/cli-php5/ext-active/ /etc/revdep-rebuild /etc/splash /etc/terminfo /etc/texmf/web2c /etc/udev/rules.d" CXXFLAGS="-O2 -march=prescott -pipe -fomit-frame-pointer -msse3 -funroll-loops" DISTDIR="/usr/portage/distfiles" FEATURES="ccache distlocks metadata-transfer parallel-fetch prelink sandbox sfperms strict unmerge-orphans userfetch" GENTOO_MIRRORS="http://mirror.datapipe.net/gentoo http://gentoo.mirrors.tds.net/gentoo ftp://mirror.datapipe.net/gentoo" LINGUAS="en_US" MAKEOPTS="-j3" PKGDIR="/usr/portage/packages" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --filter=H_**/files/digest-*" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/usr/portage/local/layman/musicbrainz /usr/portage/local/layman/liquidx /usr/portage/local/layman/sunrise /usr/local/portage" SYNC="rsync://rsync.namerica.gentoo.org/gentoo-portage" USE="X aac acl acpi alsa apache2 arts bash-completion berkdb bitmap-fonts bluetooth browserplugin bzip2 cairo cdparanoia cdr cjk cli cpudetection cracklib crypt cups dbus dga divx dri dvb dvd dvdr dvdread eds emboss encode esd evo fam ffmpeg firefox flac fortran gcj gdbm gif glitz gpm gstreamer gtk hal iconv imagemagick ipv6 isdnlog ithreads java javascript jpeg jpeg2k kde kdeenablefinal kerberos krb4 lame ldap libcaca libwww live lm_sensors logrotate lzo mad madwifi midi mikmod mmx mmxext mozbranding mozilla mp3 mp4 mpeg mplayer mudflap mysql mysqli mythtv ncurses nethack nls nptl nptlonly nsplugin ogg opanal openexr opengl openmp oss pam pcre pdf perl png pppd python qt qt3support qt4 quicktime rdesktop readline real realmedia reflection samba sdl session skey skype spell spl sse sse2 ssl svg tcpd tetex theora threads tiff truetype truetype-fonts type1-fonts unicode usb vim visualization vorbis wifi win32codecs wireless x264 x86 xcomposite xine xml xorg xscreensaver xv xvid zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol" APACHE2_MPMS="worker" ELIBC="glibc" INPUT_DEVICES="keyboard mouse wacom synaptics" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="en_US" USERLAND="GNU" VIDEO_CARDS="vga i810 vesa i915" Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, LDFLAGS, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
The bug has been files to Gentoo as well http://bugs.gentoo.org/show_bug.cgi?id=206871 and they will attach the patch here as it is something we need to fix in KDE code.
Please do a build w/o a -j, so the error messages are in order. (It's not even clear if it fails linking libkjs or libsolid). It doesn't help there isn't an actual link error message there, either --- but the warning suggests you're trying to link a shared library against a static library.
After removing the -j3 option, the error is <-- snip --> [ 10%] Building CXX object kjs/CMakeFiles/kjs.dir/CommonIdentifiers.o [ 10%] Building CXX object kjs/CMakeFiles/kjs.dir/semantic_checker.o Linking CXX shared library ../lib/libkjs.so /usr/lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../i686-pc-linux-gnu/bin/ld: warning: creating a DT_TEXTREL in object. collect2: ld returned 1 exit status make[2]: *** [lib/libkjs.so.4.0.0] Error 1 make[1]: *** [kjs/CMakeFiles/kjs.dir/all] Error 2 make: *** [all] Error 2 <-- snip --> Will upload the new build log for completeness.
Created attachment 23352 [details] New build log (from 4.0.0-r1, -j3 removed from MAKEOPTS)
Thanks. It'd be awfully helpful of ld if it actually gave the error. What happens if you do ls /usr/lib/*pcre* ?
Output from ls /usr/lib/*pcre* # ls /usr/lib/*pcre* /usr/lib/libpcre.a /usr/lib/libpcrecpp.so.0 /usr/lib/libpcre.la /usr/lib/libpcrecpp.so.0.0.0 /usr/lib/libpcre.so /usr/lib/libpcreposix.a /usr/lib/libpcre.so.0 /usr/lib/libpcreposix.la /usr/lib/libpcre.so.0.0.1 /usr/lib/libpcreposix.so /usr/lib/libpcrecpp.a /usr/lib/libpcreposix.so.0 /usr/lib/libpcrecpp.la /usr/lib/libpcreposix.so.0.0.0 /usr/lib/libpcrecpp.so
are the libpcre.so and libpcreposix.so symlinks right?
Looks like everything there is correct. I will try re-emerging these, just in case. Output from ls -l /usr/lib/*pcre* # ls -l /usr/lib/*pcre* -rw-r--r-- 1 root root 249794 Nov 19 17:27 /usr/lib/libpcre.a -rw-r--r-- 1 root root 787 Nov 19 17:27 /usr/lib/libpcre.la lrwxrwxrwx 1 root root 16 Nov 19 17:27 /usr/lib/libpcre.so -> libpcre.so.0.0.1 lrwxrwxrwx 1 root root 16 Nov 19 17:27 /usr/lib/libpcre.so.0 -> libpcre.so.0.0.1 -rwxr-xr-x 1 root root 232032 Nov 19 17:27 /usr/lib/libpcre.so.0.0.1 -rw-r--r-- 1 root root 38028 Nov 19 17:27 /usr/lib/libpcrecpp.a -rw-r--r-- 1 root root 828 Nov 19 17:27 /usr/lib/libpcrecpp.la lrwxrwxrwx 1 root root 19 Nov 19 17:27 /usr/lib/libpcrecpp.so -> libpcrecpp.so.0.0.0 lrwxrwxrwx 1 root root 19 Nov 19 17:27 /usr/lib/libpcrecpp.so.0 -> libpcrecpp.so.0.0.0 -rwxr-xr-x 1 root root 38364 Nov 19 17:27 /usr/lib/libpcrecpp.so.0.0.0 -rw-r--r-- 1 root root 4110 Nov 19 17:27 /usr/lib/libpcreposix.a -rw-r--r-- 1 root root 842 Nov 19 17:27 /usr/lib/libpcreposix.la lrwxrwxrwx 1 root root 21 Nov 19 17:27 /usr/lib/libpcreposix.so -> libpcreposix.so.0.0.0 lrwxrwxrwx 1 root root 21 Nov 19 17:27 /usr/lib/libpcreposix.so.0 -> libpcreposix.so.0.0.0 -rwxr-xr-x 1 root root 10892 Nov 19 17:27 /usr/lib/libpcreposix.so.0.0.0
Run `export CMAKE_COMPILER_VERBOSE=YesPlease` in a terminal, then try to recompile & attach the full build.log. That will show the linker command being used. I had a discussion with Anne-Marie on irc, where a user of ours hit the same problem compiling kdeedu from current SVN: Snippet from his log: cd /var/tmp/portage/kde-base/kdeedu-9999.4/work/kdeedu_build/kalgebra/src/plasmoid && /usr/bin/cmake -P CMakeFiles/kalgebraplasmoid.dir/cmake_clean_target.cmake cd /var/tmp/portage/kde-base/kdeedu-9999.4/work/kdeedu_build/kalgebra/src/plasmoid && /usr/bin/cmake -E cmake_link_script CMakeFiles/kalgebraplasmoid.dir/link.txt --verbose=1 /usr/bin/i686-pc-linux-gnu-g++ -fPIC -O2 -march=prescott -pipe -fomit-frame-pointer -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -fno-check-new -fno-common -Woverloaded-virtual -fvisibility=hidden -fvisibility-inlines-hidden -O2 -DNDEBUG -DQT_NO_DEBUG -Wl,--enable-new-dtags -Wl,--fatal-warnings -Wl,--no-undefined -lc -shared -Wl,-soname,kalgebraplasmoid.so -o ../../../lib/kalgebraplasmoid.so "CMakeFiles/kalgebraplasmoid.dir/kalgebraplasmoid_automoc.o" "CMakeFiles/kalgebraplasmoid.dir/kalgebraplasma.o" -L/var/tmp/portage/kde-base/kdeedu-9999.4/work/kdeedu_build/lib -L/usr/kde/svn/lib -L/usr/lib/qt4 -lplasma -lQtSvg -lQtCore -lpthread -lkdecore -lSM -lICE -lX11 -lXext -lXft -lXau -lXdmcp -lXpm -lQtGui -lQtXml -lXtst -lXcursor -lXfixes -lkdeui -Wl,-Bstatic -lanalitza -Wl,-Bdynamic -lQtCore -lpthread -lQtXml -lQtCore -lpthread -lQtNetwork -lQtDBus -lQtXml -lz -lbz2 -lresolv-lkdecore -Wl,-rpath,/var/tmp/portage/kde-base/kdeedu-9999.4/work/kdeedu_build/lib:/usr/kde/svn/lib:/usr/lib/qt4 /usr/lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../i686-pc-linux-gnu/bin/ld: warning: creating a DT_TEXTREL in object. collect2: ld returned 1 exit status make[2]: *** [lib/kalgebraplasmoid.so] Error 1 I guess the error stems from trying to mix static (analitza) and dynamic libraries?
Created attachment 23371 [details] log with CMAKE_COMPILER_VERBOSE=YesPlease <-- snip --> Linking CXX shared library ../lib/libkjs.so cd /var/tmp/portage/kde-base/kdelibs-4.0.0-r1/work/kdelibs_build/kjs && /usr/bin/cmake -P CMakeFiles/kjs.dir/cmake_clean_target.cmake cd /var/tmp/portage/kde-base/kdelibs-4.0.0-r1/work/kdelibs_build/kjs && /usr/bin/cmake -E cmake_link_script CMakeFiles/kjs.dir/link.txt --verbose=1 /usr/bin/i686-pc-linux-gnu-g++ -fPIC -O2 -march=prescott -pipe -fomit-frame-pointer -msse3 -funroll-loops -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -fno-check-new -fno-common -Woverloaded-virtual -fvisibility=hidden -fvisibility-inlines-hidden -O2 -DNDEBUG -DQT_NO_DEBUG -Wl,--enable-new-dtags -Wl,--fatal-warnings -Wl,--no-undefined -lc -shared -Wl,-soname,libkjs.so.4 -o ../lib/libkjs.so.4.0.0 "CMakeFiles/kjs.dir/kjs_automoc.o" "CMakeFiles/kjs.dir/ustring.o" "CMakeFiles/kjs.dir/date_object.o" "CMakeFiles/kjs.dir/collector.o" "CMakeFiles/kjs.dir/nodes.o" "CMakeFiles/kjs.dir/grammar.o" "CMakeFiles/kjs.dir/lexer.o" "CMakeFiles/kjs.dir/lookup.o" "CMakeFiles/kjs.dir/operations.o" "CMakeFiles/kjs.dir/regexp.o" "CMakeFiles/kjs.dir/function_object.o" "CMakeFiles/kjs.dir/string_object.o" "CMakeFiles/kjs.dir/bool_object.o" "CMakeFiles/kjs.dir/number_object.o" "CMakeFiles/kjs.dir/internal.o" "CMakeFiles/kjs.dir/Context.o" "CMakeFiles/kjs.dir/ExecState.o" "CMakeFiles/kjs.dir/Parser.o" "CMakeFiles/kjs.dir/array_object.o" "CMakeFiles/kjs.dir/math_object.o" "CMakeFiles/kjs.dir/object_object.o" "CMakeFiles/kjs.dir/regexp_object.o" "CMakeFiles/kjs.dir/error_object.o" "CMakeFiles/kjs.dir/function.o" "CMakeFiles/kjs.dir/debugger.o" "CMakeFiles/kjs.dir/value.o" "CMakeFiles/kjs.dir/list.o" "CMakeFiles/kjs.dir/object.o" "CMakeFiles/kjs.dir/interpreter.o" "CMakeFiles/kjs.dir/package.o" "CMakeFiles/kjs.dir/property_map.o" "CMakeFiles/kjs.dir/property_slot.o" "CMakeFiles/kjs.dir/nodes2string.o" "CMakeFiles/kjs.dir/identifier.o" "CMakeFiles/kjs.dir/scope_chain.o" "CMakeFiles/kjs.dir/dtoa.o" "CMakeFiles/kjs.dir/fpconst.o" "CMakeFiles/kjs.dir/JSLock.o" "CMakeFiles/kjs.dir/JSImmediate.o" "CMakeFiles/kjs.dir/PropertyNameArray.o" "CMakeFiles/kjs.dir/JSWrapperObject.o" "CMakeFiles/kjs.dir/CommonIdentifiers.o" "CMakeFiles/kjs.dir/semantic_checker.o" -lpthread -lm -Wl,-Bstatic -lpcre -Wl,-Bdynamic -lpcreposix /usr/lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../i686-pc-linux-gnu/bin/ld: warning: creating a DT_TEXTREL in object. collect2: ld returned 1 exit status make[2]: *** [lib/libkjs.so.4.0.0] Error 1 make[2]: Leaving directory `/var/tmp/portage/kde-base/kdelibs-4.0.0-r1/work/kdelibs_build' make[1]: *** [kjs/CMakeFiles/kjs.dir/all] Error 2 make[1]: Leaving directory `/var/tmp/portage/kde-base/kdelibs-4.0.0-r1/work/kdelibs_build' make: *** [all] Error 2 <-- snip -->
-Wl,-Bstatic -lpcre -Wl,-Bdynamic -lpcreposix what in the world is that -Bstatic for?
From the man page for ld: -Bstatic -dn -non_shared -static Do not link against shared libraries. This is only meaningful on platforms for which shared libraries are supported. The different variants of this option are for compatibility with various systems. You may use this option multiple times on the command line: it affects library searching for -l options which follow it. This option also implies --unresolved-symbols=report-all. This option can be used with -shared. Doing so means that a shared library is being created but that all of the library's external references must be resolved by pulling in entries from static libraries. Should I do something about this?
Progress: it seems when I change -Bstatic to -Bdynamic in kjs/CMakeFiles/kjs.dir/link.txt, linking of libkjs.so works, but then I get the same error when it tries to link ktranscript.so. I am going to try first rebuilding libpcre, and failing that, I will try changing all the -Bstatic to -Bdynamic in all the link.txt files.
When I remove -Bstatic from before the -lpcre flags in all the link.txt files, kdelibs builds without incident. I removed the offending flags with the following command after running configure but before running make: find ./ -name link.txt -type f -print0 | xargs -0 perl -pi -w -e 's/-Bstatic -lpcre/-lpcre/g;' I will try to emerge without the USE flag "pcre" and see if that works, too.
Fixed, not resolved: Gentoo's handling of the USE flag "pcre" seems to want to link libpcre as static, not shared. I don't know how to make a patch to fix this.
That's probably for our cmake guys, will have to figure who does it. I don't get why you even have a static version of pcre though --- it's pretty useless except in some special case..
Does seem like a CMake issue. The -Wl,-Bstatic stuff is added automatically by CMake to try to force linking to the static version of libpcre. I believe this behavior has just changed in CMake CVS, but not for this reason. It may still be interesting to try using CMake CVS to see if it builds correctly.
libanalitza is now a shared library so that should be fixed! see http://lists.kde.org/?l=kde-commits&m=120172713306397&w=2 Thanks Aleix!
As of kdelibs-4.0.1, the pcre USE flag in Gentoo has been removed. It is now required that kdelibs be built against libpcre, thereby defeating my "fix". Something needs to be done, probably to CMake, to get everything to work again. Until then, it is back to gnome for me.
A new "solution" that seems to work: move the files libpcre.a and libpcre.la from /usr/lib/ to some other directory not in the $LD_LIBRARY_PATH (like /root/). Build works because cmake can't find the static version of libpcre, so it is forced to link dynamically. This is clearly a problem with cmake, but I'm wondering if I even need the static versions of these libraries...
So find_package(PCRE) found the static versions of the library, right ? Please post the output of "grep PCRE CMakeCache.txt" in the kdelibs build directory. If you don't mind please join kde-buildsystem@kde.org so we can discuss it there, which is easier. Alex
# grep PCRE CMakeCache.txt //Force building of KJS without PCRE. Doing this will result in KJS_FORCE_DISABLE_PCRE:BOOL=OFF PCRE_INCLUDE_DIR:PATH=/usr/include //The libraries needed to use PCRE PCRE_LIBRARIES:STRING=/lib/libpcre.a;/usr/lib/libpcreposix.so PCRE_PCREPOSIX_LIBRARY:FILEPATH=/usr/lib/libpcreposix.so PCRE_PCRE_LIBRARY:FILEPATH=/lib/libpcre.a //Have symbol PCRE_CONFIG_STACKRECURSE HAVE_PCRE_STACK:INTERNAL=1 //Have symbol PCRE_CONFIG_UTF8 HAVE_PCRE_UTF8:INTERNAL=1 //Advanced flag for variable: PCRE_INCLUDE_DIR PCRE_INCLUDE_DIR-ADVANCED:INTERNAL=1 //Advanced flag for variable: PCRE_LIBRARIES PCRE_LIBRARIES-ADVANCED:INTERNAL=1 //Advanced flag for variable: PCRE_PCREPOSIX_LIBRARY PCRE_PCREPOSIX_LIBRARY-ADVANCED:INTERNAL=1 //Advanced flag for variable: PCRE_PCRE_LIBRARY PCRE_PCRE_LIBRARY-ADVANCED:INTERNAL=1
From my last post, it was obvious that I had an extra copy of libpcre.a hanging around in /lib, not /usr/lib. I deleted /lib/libpcre.a (keeping /usr/lib/libpcre.a) and everything built properly.