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

Re: how to check for binary compability?



Hi Jonas,

>>> [_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):

] (LENNY)root@apocatequil:/BUILD/kdepim-3.5.9/mimelib# readelf -a ../obj-i486-linux-gnu/mimelib/.libs/param.o | grep ixEj
] 0000032f  00003804 R_386_PLT32       00000000   _ZN8DwStringixEj
] 0000034d  00003804 R_386_PLT32       00000000   _ZN8DwStringixEj
] (LENNY)root@apocatequil:/BUILD/kdepim-3.5.9/mimelib# objdump -d ../obj-i486-linux-gnu/mimelib/.libs/param.o
] [...]
] 000001a0 <_ZN11DwParameter5ParseEv>:
] [...]
]  32e:   e8 fc ff ff ff          call   32f <_ZN11DwParameter5ParseEv+0x18f>
] [...]

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++)?

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.


Regards,

Jan

Attachment: signature.asc
Description: Digital signature


Reply to: