hidden symbol `__dso_handle' in /usr/lib/crtbegin.o is
referenced by DSO
Chuck Swiger
cswiger at mac.com
Tue Mar 8 01:49:00 UTC 2011
On Mar 7, 2011, at 5:32 PM, Австин Ким 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):
>
> hidden symbol `__dso_handle' in /usr/lib/crtbegin.o is referenced by DSO
>
> 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.
>>
>> 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.)
>
> Finally, after upgrading from 8.2-RC3 to -RELEASE I now get a lot of error messages of the form
>
> grep: write error: Broken pipe
>
> 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=`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,
--
-Chuck
More information about the freebsd-questions
mailing list