[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: how to check for binary compability?



Hey Jan,

thanks a lot for the detailed analysis :-)

On 26/05/2009 Jan C. Nordholz wrote:
> >>> [_ZN8DwStringixEj]
> 
> that symbol is defined in mimelib/mimelib/string.h as
> 
> ] inline char& DwString::operator [] (size_t aPos)
> 
> It is pulled in by mimelib/param.cpp because of
> 
> ] void DwParameter::Parse()
> ] {
> ] [...]
> ]         if (len > 2 && mValue[0] == '\'' && mValue[len-1] == '\'') {
> ] [...]
> (mValue is a DwString member of class DwParameter)
> 
> But g++ doesn't really inline inline header functions (sic):
> 
> [...]
> 
> Instead, it makes them weak global symbols:
> 
> ] (LENNY)root@apocatequil:/BUILD/kdepim-3.5.9/mimelib# nm -D ../obj-i486-linux-gnu/mimelib/.libs/libmimelib.so | grep ixEj
> ] 000299c0 W _ZN8DwStringixEj
> 
> However, this does not depend on the application of your patch. In fact, I get
> this weak symbol with and without your 1.1.2 diff... What environment did you
> compile your standalone libmimelib in (e.g. do you pass '-finline' to g++)?

You can find the current version of my packages at
http://people.debian.org/~mejo/mimelib1/. I built the packages in a
up-to-date amd64 debian/sid pbuilder environment. As you can see in the
build log at mimelib1_1.1.4-1_amd64.build, no -finline is passed to g++.

> Regarding the original question: Anyone who would like to use that function
> would have to include <mimelib/string.h> anyway, so dropping the symbol from
> the library (however you managed to do that) should be safe.

great, so I don't need to bump the soname just because the private symbol
was removed.

so only one question remains for me: do I need to bump the soname or at
least provide a symbols file for added library symbols? or can I simply
ignore them as well?

the final diff of 'objdump -T /usr/lib/libmimelib.so.1 | grep \\.text |
cut -b62-' from 1.1.2_kde to my 1.1.4 packages is:

+_Z17delete_rep_safelyP11DwStringRep
+_Z17new_rep_referenceP11DwStringRep
+_Z8mem_copyPKcmPc
+_ZN13DwFieldParserD1Ev
+_ZN14DwEntityParserD1Ev
+_ZN8DwBinhexD0Ev
+_ZN8DwBinhexD1Ev
+_ZN8DwBinhexD2Ev
+_ZN8DwString2atEm
+_ZNK8DwString2atEm
-_ZN8DwStringixEm
-mkstemps
-strlcat
-strlcpy

as you can see, I have patched mimelib 1.1.2 further with some patches
from kde, but these only add new symbols and don't remove any.

greetings,
 jonas

Attachment: signature.asc
Description: Digital signature


Reply to: