Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 07 Mar 2011 17:48:59 -0800
From:      Chuck Swiger <cswiger@mac.com>
To:        =?utf-8?B?0JDQstGB0YLQuNC9INCa0LjQvA==?= <avstin@mail.ru>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: hidden symbol `__dso_handle' in /usr/lib/crtbegin.o is referenced by DSO
Message-ID:  <1E9B3906-C506-429B-8BCC-4503382F60D6@mac.com>
In-Reply-To: <E1Pwlmx-0002ib-00.avstin-mail-ru@f33.mail.ru>
References:  <E1Pwlmx-0002ib-00.avstin-mail-ru@f33.mail.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mar 7, 2011, at 5:32 PM, =D0=90=D0=B2=D1=81=D1=82=D0=B8=D0=BD =D0=9A=D0=
=B8=D0=BC wrote:
> I've lately upgraded from FreeBSD 8.2-RC3 to 8.2-RELEASE via =
freebsd-update and am now getting the following error when trying to =
build www/webkit-gtk2 in Ports (this was pulled in by the GIMP =
meta-port; the tail output of make(1) is appended):
>=20
> hidden symbol `__dso_handle' in /usr/lib/crtbegin.o is referenced by =
DSO
>=20
> What does this mean, and how might one go about fixing it?

A quick search finds a quote attributed to Martin Loewis:

>> My guess is that it is the infamous .hidden conflict, where the
>> binutils snapshot implements .hidden by putting a STB_LOCAL symbol in
>> the dynamic symbol table (namely __dso_handle). The dynamic linker
>> fails to find this symbol in the shared library, because it does not
>> consider STB_LOCAL symbols.
>>=20
>> The work-around is to not define HAVE_GAS_HIDDEN in auto-host.h, and
>> recompile the compiler. I'm not sure what the solution is. Perhaps
>> somebody should sit down and implement .hidden in the same way as
>> local symbols in the symbol versioning feature. Perhaps that someone
>> should be me, but I haven't started, yet.

Some people have reported this to be fixed by making sure that anything =
which is being compiled as a shared object uses the -shared compiler =
flag.  (And -fPIC and such, also.)

>  (The more generally applicable the answer, the better, as I've =
encountered this error on several occasions while trying to rebuild =
other Ports after upgrading FreeBSD.)
>=20
> Finally, after upgrading from 8.2-RC3 to -RELEASE I now get a lot of =
error messages of the form
>=20
> grep: write error: Broken pipe
>=20
> while building ports, where `grep' is variously `sed,' `sort,' or a =
number of other variations.  What's the cause of this, and where should =
I start looking to fix it?

It's likely not a problem.  If you've got a pipeline and a later part of =
it completes, then earlier parts of the pipeline will get a SIGPIPE if =
they keep writing output.

See /usr/src/gnu/usr.bin/grep/ChangeLog

1999-02-06 Alain Magloire

        * tests/*.awk : Linux users are seeing "Broken Pipe" on make =
check.
        The problem is that grep does not drain its stdin, thus the =
previous
        process in the pipeline receives a SIGPIPE.  Other shells are =
silent
        about this.  There is actually no failure, since the broken pipe =
is
        expected.  You can work around it by changing the pipeline, so =
that
        the input is drained, like this:
        status=3D`echo 'check' | { ${GREP} -E -e pattern >/dev/null =
2>&1;
        echo $?; cat >/dev/null; }`; if test $status -ne $errnu then ... =
fi
        Excerpt email from Andreas Schwab.

Regards,
--=20
-Chuck




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1E9B3906-C506-429B-8BCC-4503382F60D6>