Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Dec 2014 03:05:27 -0800 (PST)
From:      Don Lewis <truckman@FreeBSD.org>
To:        ports@FreeBSD.org
Subject:   Re: www/webkit-gtk3 build broken on FreeBSD 8.4 and general c++ library conflicts
Message-ID:  <201412091105.sB9B5Rva081995@gw.catspoiler.org>

next in thread | raw e-mail | index | archive | help
On  3 Dec, Don Lewis wrote:
> When attempting to build webkit-gtk3 on FreeBSD 8.4, it fails like this:
> 
>   CXXLD    Programs/LLIntOffsetsExtractor
> /usr/local/lib/libc++.so.1: undefined reference to `iswalpha_l'
> /usr/local/lib/libc++.so.1: undefined reference to `wctob_l'
> /usr/local/lib/libc++.so.1: undefined reference to `snprintf_l'
> /usr/local/lib/libc++.so.1: undefined reference to `iswprint_l'
> /usr/local/lib/libc++.so.1: undefined reference to `iswlower_l'
> /usr/local/lib/libc++.so.1: undefined reference to `mbrtowc_l'
> /usr/local/lib/libc++.so.1: undefined reference to `towlower_l'
> /usr/local/lib/libc++.so.1: undefined reference to `mbsrtowcs_l'
> /usr/local/lib/libc++.so.1: undefined reference to `tolower_l'
> /usr/local/lib/libc++.so.1: undefined reference to `iswxdigit_l'
> /usr/local/lib/libc++.so.1: undefined reference to `strxfrm_l'
> /usr/local/lib/libc++.so.1: undefined reference to `strftime_l'
> /usr/local/lib/libc++.so.1: undefined reference to `toupper_l'
> /usr/local/lib/libc++.so.1: undefined reference to `isxdigit_l'
> /usr/local/lib/libc++.so.1: undefined reference to `wcsxfrm_l'
> /usr/local/lib/libc++.so.1: undefined reference to `__mb_cur_max_l'
> /usr/local/lib/libc++.so.1: undefined reference to `newlocale'
> /usr/local/lib/libc++.so.1: undefined reference to `iswdigit_l'
> /usr/local/lib/libc++.so.1: undefined reference to `iswctype_l'
> /usr/local/lib/libc++.so.1: undefined reference to `mbrlen_l'
> /usr/local/lib/libc++.so.1: undefined reference to `btowc_l'
> /usr/local/lib/libc++.so.1: undefined reference to `wcrtomb_l'
> /usr/local/lib/libc++.so.1: undefined reference to `mbsnrtowcs_l'
> /usr/local/lib/libc++.so.1: undefined reference to `iswcntrl_l'
> /usr/local/lib/libc++.so.1: undefined reference to `localeconv_l'
> /usr/local/lib/libc++.so.1: undefined reference to `asprintf_l'
> /usr/local/lib/libc++.so.1: undefined reference to `mbtowc_l'
> /usr/local/lib/libc++.so.1: undefined reference to `strcoll_l'
> /usr/local/lib/libc++.so.1: undefined reference to `iswpunct_l'
> /usr/local/lib/libc++.so.1: undefined reference to `iswspace_l'
> /usr/local/lib/libc++.so.1: undefined reference to `towupper_l'
> /usr/local/lib/libc++.so.1: undefined reference to `iswupper_l'
> /usr/local/lib/libc++.so.1: undefined reference to `wcsnrtombs_l'
> /usr/local/lib/libc++.so.1: undefined reference to `freelocale'
> /usr/local/lib/libc++.so.1: undefined reference to `isdigit_l'
> /usr/local/lib/libc++.so.1: undefined reference to `wcscoll_l'
> /usr/local/lib/libc++.so.1: undefined reference to `sscanf_l'
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> GNUmakefile:40531: recipe for target 'Programs/LLIntOffsetsExtractor' failed
> gmake: *** [Programs/LLIntOffsetsExtractor] Error 1
> *** Error code 1
> 
> Stop in /usr/ports/www/webkit-gtk3.
> 
> 
> which indicates that trying to use the ports version of libc++ is now
> pretty much a lost cause on FreeBSD 8.4.
> 
> The webkit-gtk3 port tests OSVERSION and forces the use of clang and
> libc++ from ports if it thinks that the system doesn't have clang in
> base (and gets it wrong on newer systems that are configured to build
> base with gcc instead of clang).  The Makefile hackery for this has the
> following comment:
> 
> # We need clang + libc++ or gcc 4.7+. gcc has libstdc++ conflict between
> # gcc port and base. This originates from icu
> 
> I'm assuming that this is supposed to mean that gcc 4.7+ won't work
> because it will drag in the matching version of libstdc++ from the gcc
> port, which will conflict with the version of libstdc++ from base that
> icu is linked against, because icu is always built with the compiler
> from base.  If so, I don't see how this could possibly work by using
> clang and libc++ from ports because any binary that gets linked to both
> libc++ and libstdc++ is pretty much guaranteed to croak when executed.
> 
> It seems to be that webkit-gtk3 needs to be compiled with gcc 4.7+, at
> least on FreeBSD 8.4.  Clang might be another a possibility on FreeBSD
> 9.x if its libc has the necessary symbols.   To avoid the c++ library
> conflict, icu needs to be compiled with the same compiler and c++
> library as webkit-gtk3.  Any other ports that depend on either of these
> two ports will also need to use the same same compiler and c++ library
> *and* any c++ dependencies of these ports will also need to do the same,
> and so forth.
> 
> Maybe the cleanest thing to do is avoid using c++ (GCC) 4.2.1 when
> building any (nontrivial?) ports and force the use of a compiler from
> ports instead.

It looks like my suspicion is correct about consumers of webkit-gtk3
getting liked with both c++ libraries is correct.  I ran and interactive
	poudriere testport -o devel/seed
with a 9.3-RELEASE jail and got the following list of shared libraries
being used by the seed executable in the jail:

# ldd /usr/local/bin/seed
/usr/local/bin/seed:
	libgthread-2.0.so.0 => /usr/local/lib/libgthread-2.0.so.0 (0x80081b000)
	libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x800a1c000)
	libintl.so.8 => /usr/local/lib/libintl.so.8 (0x800d1c000)
	libseed-gtk3.so.0 => /usr/local/lib/libseed-gtk3.so.0 (0x800f27000)
	libwebkitgtk-3.0.so.0 => /usr/local/lib/libwebkitgtk-3.0.so.0 (0x801148000)
	libthr.so.3 => /lib/libthr.so.3 (0x8032ca000)
	libc.so.7 => /lib/libc.so.7 (0x8034ed000)
	libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x803848000)
	libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x803b44000)
	libgirepository-1.0.so.1 => /usr/local/lib/libgirepository-1.0.so.1 (0x803dab000)
	libgtk-3.so.0 => /usr/local/lib/libgtk-3.so.0 (0x803fdc000)
	libgdk-3.so.0 => /usr/local/lib/libgdk-3.so.0 (0x804849000)
	libpangocairo-1.0.so.0 => /usr/local/lib/libpangocairo-1.0.so.0 (0x804ad9000)
	libpango-1.0.so.0 => /usr/local/lib/libpango-1.0.so.0 (0x804ce5000)
	libatk-1.0.so.0 => /usr/local/lib/libatk-1.0.so.0 (0x804f2e000)
	libcairo-gobject.so.2 => /usr/local/lib/libcairo-gobject.so.2 (0x805153000)
	libcairo.so.2 => /usr/local/lib/libcairo.so.2 (0x80535b000)
	libgdk_pixbuf-2.0.so.0 => /usr/local/lib/libgdk_pixbuf-2.0.so.0 (0x805654000)
	libsoup-2.4.so.1 => /usr/local/lib/libsoup-2.4.so.1 (0x805874000)
	libjavascriptcoregtk-3.0.so.0 => /usr/local/lib/libjavascriptcoregtk-3.0.so.0 (0x805b3f000)
	libgio-2.0.so.0 => /usr/local/lib/libgio-2.0.so.0 (0x806340000)
	libgobject-2.0.so.0 => /usr/local/lib/libgobject-2.0.so.0 (0x8066a4000)
	libffi.so.6 => /usr/local/lib/libffi.so.6 (0x8068f1000)
	libenchant.so.1 => /usr/local/lib/libenchant.so.1 (0x806af8000)
	libharfbuzz-icu.so.0 => /usr/local/lib/libharfbuzz-icu.so.0 (0x806d03000)
	libharfbuzz.so.0 => /usr/local/lib/libharfbuzz.so.0 (0x806f05000)
	libgmodule-2.0.so.0 => /usr/local/lib/libgmodule-2.0.so.0 (0x807173000)
	libgstapp-1.0.so.0 => /usr/local/lib/libgstapp-1.0.so.0 (0x807376000)
	libgstaudio-1.0.so.0 => /usr/local/lib/libgstaudio-1.0.so.0 (0x807582000)
	libgstfft-1.0.so.0 => /usr/local/lib/libgstfft-1.0.so.0 (0x8077ce000)
	libgstpbutils-1.0.so.0 => /usr/local/lib/libgstpbutils-1.0.so.0 (0x8079d7000)
	libgstvideo-1.0.so.0 => /usr/local/lib/libgstvideo-1.0.so.0 (0x807bfc000)
	libgstbase-1.0.so.0 => /usr/local/lib/libgstbase-1.0.so.0 (0x807e44000)
	libgstreamer-1.0.so.0 => /usr/local/lib/libgstreamer-1.0.so.0 (0x80809d000)
	libjpeg.so.8 => /usr/local/lib/libjpeg.so.8 (0x808399000)
	libsecret-1.so.0 => /usr/local/lib/libsecret-1.so.0 (0x8085d0000)
	libxslt.so.1 => /usr/local/lib/libxslt.so.1 (0x808820000)
	libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x808a5b000)
	libGL.so.1 => /usr/local/lib/libGL.so.1 (0x808dbc000)
	libpangoft2-1.0.so.0 => /usr/local/lib/libpangoft2-1.0.so.0 (0x80903b000)
	libfontconfig.so.1 => /usr/local/lib/libfontconfig.so.1 (0x80924f000)
	libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x80948a000)
	libpng15.so.15 => /usr/local/lib/libpng15.so.15 (0x80971c000)
	libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x80994b000)
	libicui18n.so.53 => /usr/local/lib/libicui18n.so.53 (0x809c01000)
	libicuuc.so.53 => /usr/local/lib/libicuuc.so.53 (0x80a083000)
	libicudata.so.53 => /usr/local/lib/libicudata.so.53 (0x80a418000)
	libwebp.so.5 => /usr/local/lib/libwebp.so.5 (0x80bb07000)
	libXcomposite.so.1 => /usr/local/lib/libXcomposite.so.1 (0x80bd69000)
	libXdamage.so.1 => /usr/local/lib/libXdamage.so.1 (0x80bf6b000)
	libXfixes.so.3 => /usr/local/lib/libXfixes.so.3 (0x80c16d000)
	libXrender.so.1 => /usr/local/lib/libXrender.so.1 (0x80c372000)
	libXt.so.6 => /usr/local/lib/libXt.so.6 (0x80c57b000)
	libX11.so.6 => /usr/local/lib/libX11.so.6 (0x80c7dd000)
	libz.so.6 => /lib/libz.so.6 (0x80cb13000)
	libc++.so.1 => /usr/local/lib/libc++.so.1 (0x80cd27000)
	libcxxrt.so => /usr/local/lib/libcxxrt.so (0x80cfe7000)
	libm.so.5 => /lib/libm.so.5 (0x80d203000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x80d424000)
	libXinerama.so.1 => /usr/local/lib/libXinerama.so.1 (0x80d632000)
	libXrandr.so.2 => /usr/local/lib/libXrandr.so.2 (0x80d834000)
	libXcursor.so.1 => /usr/local/lib/libXcursor.so.1 (0x80da3d000)
	libXext.so.6 => /usr/local/lib/libXext.so.6 (0x80dc47000)
	libXi.so.6 => /usr/local/lib/libXi.so.6 (0x80de58000)
	libatk-bridge-2.0.so.0 => /usr/local/lib/libatk-bridge-2.0.so.0 (0x80e067000)
	libpixman-1.so.0 => /usr/local/lib/libpixman-1.so.0 (0x80e297000)
	libxcb-shm.so.0 => /usr/local/lib/libxcb-shm.so.0 (0x80e537000)
	libxcb-render.so.0 => /usr/local/lib/libxcb-render.so.0 (0x80e739000)
	libxcb.so.1 => /usr/local/lib/libxcb.so.1 (0x80e942000)
	libgraphite2.so.3 => /usr/local/lib/libgraphite2.so.3 (0x80eb61000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x80ed8e000)
	libgsttag-1.0.so.0 => /usr/local/lib/libgsttag-1.0.so.0 (0x80f095000)
	liborc-0.4.so.0 => /usr/local/lib/liborc-0.4.so.0 (0x80f2cd000)
	libgcrypt.so.20 => /usr/local/lib/libgcrypt.so.20 (0x80f554000)
	libgpg-error.so.0 => /usr/local/lib/libgpg-error.so.0 (0x80f800000)
	liblzma.so.5 => /usr/lib/liblzma.so.5 (0x80fa10000)
	libglapi.so.0 => /usr/local/lib/libglapi.so.0 (0x80fc33000)
	libX11-xcb.so.1 => /usr/local/lib/libX11-xcb.so.1 (0x80fe88000)
	libxcb-glx.so.0 => /usr/local/lib/libxcb-glx.so.0 (0x810089000)
	libxcb-dri2.so.0 => /usr/local/lib/libxcb-dri2.so.0 (0x8102a1000)
	libXxf86vm.so.1 => /usr/local/lib/libXxf86vm.so.1 (0x8104a5000)
	libdrm.so.2 => /usr/local/lib/libdrm.so.2 (0x8106aa000)
	libexpat.so.1 => /usr/local/lib/libexpat.so.1 (0x8108b5000)
	libbz2.so.4 => /usr/lib/libbz2.so.4 (0x810ad9000)
	libSM.so.6 => /usr/local/lib/libSM.so.6 (0x810ce9000)
	libICE.so.6 => /usr/local/lib/libICE.so.6 (0x810ef0000)
	librpcsvc.so.5 => /usr/lib/librpcsvc.so.5 (0x81110b000)
	librt.so.1 => /usr/lib/librt.so.1 (0x811314000)
	libatspi.so.0 => /usr/local/lib/libatspi.so.0 (0x811519000)
	libdbus-1.so.3 => /usr/local/lib/libdbus-1.so.3 (0x811747000)
	libXau.so.6 => /usr/local/lib/libXau.so.6 (0x81199a000)
	libpthread-stubs.so.0 => /usr/local/lib/libpthread-stubs.so.0 (0x811b9c000)
	libXdmcp.so.6 => /usr/local/lib/libXdmcp.so.6 (0x811d9d000)

Linking both
	libc++.so.1 => /usr/local/lib/libc++.so.1
and
	libstdc++.so.6 => /usr/lib/libstdc++.so.6
into the same executable is generally a way to generate crashes in
my experience.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201412091105.sB9B5Rva081995>