[poky] Shared library packaging

Mark Hatle mark.hatle at windriver.com
Wed Mar 16 15:38:34 PDT 2011


On 3/16/11 5:27 PM, Gary Thomas wrote:
> On 03/16/2011 04:23 PM, Mark Hatle wrote:
>> On 3/16/11 5:10 PM, Gary Thomas wrote:
>>> I'm working on a recipe which has a number of shared libraries (actually
>>> this is just an import from OE (mozilla/nss) which has the same problem as listed below)
>>> The package creates a number of libraries (from the work tree):
>>>       image/usr/lib/libsmime3.so ->  libsmime3.so.1oe
>>>       image/usr/lib/libsmime3.so.1oe
>>>       image/usr/lib/libsoftokn3.so
>>>       image/usr/lib/libfreebl3.so
>>>       image/usr/lib/libnssutil3.so ->  libnssutil3.so.1oe
>>>       image/usr/lib/libnssutil3.so.1oe
>>>       image/usr/lib/libnss3.so ->  libnss3.so.1oe
>>>       image/usr/lib/libnss3.so.1oe
>>>       image/usr/lib/libssl3.so ->  libssl3.so.1oe
>>>       image/usr/lib/libssl3.so.1oe
>>>
>>> The .so.1oe files are packaged in nss_XXX.ipk and the .so files are
>>> put into nss-dev_XXX.ipk.  The problem is that there is code out there
>>> that only wants to look for the .so files (no -dev packages installed)
>>> and fail to find libsoftokn3.so and libfreebl3.so
>>
>> This sounds like an error in the SONAME embedded in the files.  For example if
>> the soname of libnss2.so.1oe, is libnss3.so, both it and the link will be
>> captured in the base package -- leaving the -dev empty.
>>
>> (If the SONAME is correct and it's not working this way that is likely a bug in
>> the routines breaking up base and dev packages!)
> 
> How can I check this (not my comfort zone)?

I usually run "readelf -a <library>"  and then grep for SONAME.

It's likely better to run the target version of readelf if the target is not IA32.

>>
>>> Is there a way to [easily?] force these two libraries to be packaged
>>> into nss-XXX.ipk?
>>
>> Assuming fixing the sonames is not an option, the alternative is to specify the
>> packages and FILES_... list of files for each chunk instead of letting the
>> system determine things automatically.  It's a bit messier, but you have
>> ultimate control of what is and is not included...
>>
>>> My current workaround is to use a post-install script to create the .so
>>> files from the .so.1oe files for these two libraries.  It gets my code
>>> (chromium-11 browser!) to work, but it's not very satisfying.
>>
>> If possible, fix the soname item... otherwise there can be loader problems if
>> the device doesn't end up with an ld.so.cache...  (which is why the link is
>> working I suspect...)
> 
> I think the problem is in some very messy Mozilla code that uses dl_load() directly
> and only looks for the .so file name.
> 
> I'll probably go with the FILES solution.
> 

Ya, dl_loaded files don't follow the normal conventions, the files approach is
likely your only solution then.

--Mark



More information about the poky mailing list