On 4 November 2012 23:09, James Cloos wrote: > > I'm seeing an unexpected undefined reference error from ld(1) for a > package which uses icu. > > The error is dependent on CXXFLAGS, notably the three graphite flags. > > Although, now that I try to duplicate that, I cannot and get the same > undefined refs every time. :-/ > > The first undefined ref is to: > > icu::LEFontInstance::mapCharsToGlyphs(unsigned short const*, > int, > int, > signed char, > icu::LECharMapper const*, > signed char, > icu::LEGlyphStorage&) const > > The definition in icu's src is: > > void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], > le_int32 offset, > le_int32 count, > le_bool reverse, > const LECharMapper *mapper, > le_bool filterZeroWidth, > LEGlyphStorage &glyphStorage) const > > and the library has: > > _ZNK3icu14LEFontInstance16mapCharsToGlyphsEPKDsiiaPKNS_12LECharMapperEaRNS_14LEGlyphStorageE > > which I presume splits out as: > > E PK Ds i i a PK NS_12LECharMapper E a R NS_14LEGlyphStorage E > > which seems to match, presuming PKDs is a pointer to ushort, and a is > a signed char. It doesn't match, c++filt shows that symbol is icu::LEFontInstance::mapCharsToGlyphs(char16_t const*, int, int, signed char, icu::LECharMapper const*, signed char, icu::LEGlyphStorage&) const char16_t is not unsigned short.