Re: latest sbin/pkg updates seem to break HEAD

From: Matthias Andree <mandree_at_FreeBSD.org>
Date: Mon, 28 Oct 2013 23:14:58 +0100
Am 26.10.2013 14:42, schrieb Rainer Hurling:
> Am 26.10.2013 13:04, schrieb Matthias Andree:
>> Am 26.10.2013 12:56, schrieb Rainer Hurling:
>>> After svn update my 11.0-CURRENT box to r257152, the build breaks.
>>> Obviously there is something wrong with the newest patches for sbin/pkg
>>> (or libcrypt). Am I the only one observing this?
>>>
>>> Any help is appreciated,
>>> Rainer Hurling
>>>
>>>
>>> [..snip..]
>>> ===> usr.sbin/pkg (all)
>> ...
>>> cc  -O2 -pipe  -I/usr/src/usr.sbin/pkg/../../contrib/libyaml/include -std=gnu99 
>>> [...]
>>> -L/usr/obj/usr/src/tmp/usr/lib/private -rpath /usr/lib/private -o pkg
>>> pkg.o dns_utils.o config.o -larchive -lelf -lfetch -lyaml -lsbuf -lssl
>>>
>>> /usr/obj/usr/src/tmp/usr/bin/ld: D: invalid DSO for symbol `EVP_PKEY_free' definition

This means that the indirect dependency pulled in from one of the given
libraries (-lssl in this case) is not eligible for resolving
EVP_PKEY_free(), because the library that provides this EVP_PKEY_free()
is not mentioned explicitly on the linker's command line.

>>> /usr/obj/usr/src/tmp/lib/libcrypto.so.7: could not read symbols: Bad value

...and this line translates to "libcrypto.so.7: was brought in as
indirect dependency, could resolve your missing symbol, but is not
permitted to. Add -lcrypto explicitly to the linker command line."

Arguably Fedora Linux offers nicer error messages if the screenshot
(URL/quote below) is authentic.

>>> cc: error: linker command failed with exit code 1 (use -v to see invocation)
>>> *** Error code 1
>>> Stop.
>>> make[4]: stopped in /usr/src/usr.sbin/pkg
>>
>> These can happen if a library is missing, for instance, -lcrypto is
>> apparently not mentioned on the linker's command line, but AFAIR the
>> clang linker accepts no unresolved symbols from .so when linking
>> executables, and -lssl likely needs -lcrypto.  This avoids run-time
>> surprises due to missing dependencies (on libcrypto, in this case).
>>
>> Try pasting that command line with -lcrypto added after -lssl, and if
>> that helps, try to debug where the -lcrypto has been or gets lost, or
>> should get added.
>>
>> HTH
> 
> Yep, adding -lcrypto seems to help. I patched usr.sbin/pkg/Makefile for it.
> 
> But I am wondering if nobody else has this problem? I did not change my
> systems sources before.

Greetings,

I discussed this a bit with Bryan Drewery on IRC, and the information
pieces that I will post here for posterity and to have this in the
archives are:

1. pkg itself calls the EVP_*() functions from libcrypto.

2. on bdrewery's system, the linker pulled libcrypto in through libssl
as an indirect dependency.  It was not supposed to do that, but happened
- as to why, we don't know.

3. The general idea, that bdrewery agrees to, is that all shared
dependencies must be specified directly on the linker's command line.
<http://fedoraproject.org/wiki/UnderstandingDSOLinkChange>
this has the screenshot with a nicer error message:

> /usr/bin/ld.bfd: rpmdumpheader.o: undefined reference to symbol 'Fopen'
> /usr/bin/ld.bfd: note: 'Fopen' is defined in DSO /usr/lib/librpmio.so.0 so try adding it to the linker command line
> /usr/lib/librpmio.so.0: could not read symbols: Invalid operation

4. It's not necessarily clang that causes it, but either gold, or a
change to FreeBSD's ld in Late July that disabled the use of indirect
dependencies
<http://svnweb.freebsd.org/base?view=revision&sortby=date&revision=253839>.

Hope that helps.

Best regards
Matthias
Received on Mon Oct 28 2013 - 21:15:01 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:43 UTC