Here's what I would do: * build ICU from source (with --enable-layout) * after it built, *replace* lib/libicule* ( the ICU layout engine) in ICU's build dir with Harfbuzz's * also replace the whole source/layout directory with something containing the harfbuzz headers * Then, do a build in the source/layout*ex* directory
That should give you a libiculx linked against HB. I filed an ICU ticket here: http://bugs.icu-project.org/trac/ticket/11023 Behdad: can you fix the wrapper page to link to this bug with "if you use layoutex", and I will do the same on the ICU warning. On 07/17/2014 04:03 PM, Steven R. Loomis wrote: > Hi, let me take a look.. > > On 07/17/2014 01:24 PM, Behdad Esfahbod wrote: >> No idea. >> >> On 14-07-17 11:31 AM, Anita Hui wrote: >>> Hi Behdad :) >>> >>> So I built the two static libraries libharfbuzz.a and libicu-le-hb.a, and >>> put the two and their respective header files into my project, replacing >>> libicule.a and its header files like so: >>> >>> >>> /Users/anitahui/Projects/main/Gladiator/uswish/samples/FocusAE/src/../../../thirdparty/prebuilt/ios/arch-arm/Debug/libicui18n.a >>> >>> >>> /Users/anitahui/Projects/main/Gladiator/uswish/samples/FocusAE/src/../../../thirdparty/prebuilt/ios/arch-arm/Debug/libiculx.a >>> >>> >>> /Users/anitahui/Projects/main/Gladiator/uswish/samples/FocusAE/src/../../../thirdparty/prebuilt/ios/arch-arm/Debug/libharfbuzz.a >>> >>> >>> /Users/anitahui/Projects/main/Gladiator/uswish/samples/FocusAE/src/../../../thirdparty/prebuilt/ios/arch-arm/Debug/libicu-le-hb.a >>> >>> >>> /Users/anitahui/Projects/main/Gladiator/uswish/samples/FocusAE/src/../../../thirdparty/prebuilt/ios/arch-arm/Debug/libicuuc.a >>> >>> >>> /Users/anitahui/Projects/main/Gladiator/uswish/samples/FocusAE/src/../../../thirdparty/prebuilt/ios/arch-arm/Debug/libicudata.a >>> >>> >>> And I'm getting the error below for amv7 as well as armv7s: >>> >>> Undefined symbols for architecture armv7: >>> "icu_50::LayoutEngine::layoutEngineFactory(icu_50::LEFontInstance const*, >>> int, int, LEErrorCode&)", referenced from: >>> icu_50::ParagraphLayout::ParagraphLayout(unsigned short const*, int, >>> icu_50::FontRuns const*, icu_50::ValueRuns const*, icu_50::ValueRuns >>> const*, icu_50::LocaleRuns const*, unsigned char, signed char, >>> LEErrorCode&) in libiculx.a(ParagraphLayout.ao) >>> "icu_50::LayoutEngine::getGlyphs(unsigned int*, LEErrorCode&) const", >>> referenced from: >>> icu_50::ParagraphLayout::ParagraphLayout(unsigned short const*, int, >>> icu_50::FontRuns const*, icu_50::ValueRuns const*, icu_50::ValueRuns >>> const*, icu_50::LocaleRuns const*, unsigned char, signed char, >>> LEErrorCode&) in libiculx.a(ParagraphLayout.ao) >>> "icu_50::LayoutEngine::getGlyphPositions(float*, LEErrorCode&) const", >>> referenced from: >>> icu_50::ParagraphLayout::ParagraphLayout(unsigned short const*, int, >>> icu_50::FontRuns const*, icu_50::ValueRuns const*, icu_50::ValueRuns >>> const*, icu_50::LocaleRuns const*, unsigned char, signed char, >>> LEErrorCode&) in libiculx.a(ParagraphLayout.ao) >>> "vtable for icu_50::LEFontInstance", referenced from: >>> icu_50::LEFontInstance::LEFontInstance() in >>> libuswish.a(YiLEFontInstanceFT.o) >>> NOTE: a missing vtable usually means the first non-inline virtual member >>> function has no definition. >>> "icu_50::LEFontInstance::canDisplay(int) const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::mapCharToGlyph(int, icu_50::LECharMapper const*, >>> signed char) const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "typeinfo for icu_50::LEFontInstance", referenced from: >>> typeinfo for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::mapCharToGlyph(int, icu_50::LECharMapper const*) >>> const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::xUnitsToPoints(float) const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LayoutEngine::getCharIndices(int*, int, LEErrorCode&) const", >>> referenced from: >>> icu_50::ParagraphLayout::ParagraphLayout(unsigned short const*, int, >>> icu_50::FontRuns const*, icu_50::ValueRuns const*, icu_50::ValueRuns >>> const*, icu_50::LocaleRuns const*, unsigned char, signed char, >>> LEErrorCode&) in libiculx.a(ParagraphLayout.ao) >>> "icu_50::LEFontInstance::unitsToPoints(LEPoint&, LEPoint&) const", >>> referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::xPixelsToUnits(float) const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::pixelsToUnits(LEPoint&, LEPoint&) const", >>> referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::transformFunits(float, float, LEPoint&) const", >>> referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::yPixelsToUnits(float) const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::mapCharsToGlyphs(unsigned short const*, int, >>> int, signed char, icu_50::LECharMapper const*, signed char, >>> icu_50::LEGlyphStorage&) const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::getLineHeight() const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::yUnitsToPoints(float) const", referenced from: >>> vtable for CYILEFontInstanceFT in libuswish.a(YiLEFontInstanceFT.o) >>> "icu_50::LEFontInstance::~LEFontInstance()", referenced from: >>> CYILEFontInstanceFT::CYILEFontInstanceFT(CYITextRendererFT*, int) in >>> libuswish.a(YiLEFontInstanceFT.o) >>> CYILEFontInstanceFT::~CYILEFontInstanceFT() in >>> libuswish.a(YiLEFontInstanceFT.o) >>> ld: symbol(s) not found for architecture armv7 >>> clang: error: linker command failed with exit code 1 (use -v to see >>> invocation) >>> >>> Do you have any ideas as to what I'm doing wrong or any thing I may have >>> missed? >>> >>> Thanks! > Are you really linking against the wrapper or partly against the real > libicule? > > > ICU ParagraphLayout doesn't have an option to build against HarfBuzz so > you will have to probably do that manually. > > Probably ICU's ParagraphLayout (libicul*x*) is linking against ICU's > *libicule*. > > -s >>> ________________________________________ >>> From: Behdad Esfahbod <[email protected]> on behalf of Behdad >>> Esfahbod <[email protected]> >>> Sent: Wednesday, July 16, 2014 3:02 PM >>> To: Anita Hui; [email protected] >>> Subject: Re: [HarfBuzz] Cross-compiling HarfBuzz for ios >>> >>> D'oh. Up to you whether you do static or dynamic linking, but icu-le-hb >>> uses >>> HarfBuzz, so yes, you need libharfbuzz one way or another. If you want >>> all-static, they you need libharfbuzz.a. >>> >>> On 14-07-16 02:43 PM, Anita Hui wrote: >>>> Oh, so do you mean that I would need to link the executable with >>>> libharfbuzz.a to use libicu-le-hb.a to replace libicule.a? >>>> >>>> Or that I need to have HarfBuzz on my system in order to build >>>> libicu-le-hb.a, which I can then use as a replacement for libicule.a >>>> without having to link the executable with libharfbuzz.a? >>>> >>>> ________________________________________ >>>> From: Behdad Esfahbod <[email protected]> on behalf of Behdad >>>> Esfahbod <[email protected]> >>>> Sent: Wednesday, July 16, 2014 2:12 PM >>>> To: Anita Hui; [email protected] >>>> Subject: Re: [HarfBuzz] Cross-compiling HarfBuzz for ios >>>> >>>> On 14-07-16 02:11 PM, Anita Hui wrote: >>>>> Just so I'm sure I understand, does this mean that libicu-le-hb.a is >>>>> standalone and can directly replace libicule.a without anything extra? >>>> Yes, as long as by "standalone" you mean "only needs harfbuzz". :) >>>> >>>>> Also thanks for responding so quickly :D >>>>> >>>>> ________________________________________ >>>>> From: Behdad Esfahbod <[email protected]> on behalf of Behdad >>>>> Esfahbod <[email protected]> >>>>> Sent: Wednesday, July 16, 2014 12:47 PM >>>>> To: Anita Hui; [email protected] >>>>> Subject: Re: [HarfBuzz] Cross-compiling HarfBuzz for ios >>>>> >>>>> On 14-07-16 12:42 PM, Anita Hui wrote: >>>>>> Hi Behdad, >>>>>> >>>>>> Thanks for your response! I have a general question about building >>>>>> static HarfBuzz libraries for replacing icu-LE. I noticed in the >>>>>> configure process when checking for tools, it checks for ICU. Does this >>>>>> mean that I need to have ICU in order to build libharfbuzz-icu.a? Please >>>>>> correct me if I'm wrong but I'm guessing that I need libharfbuzz-icu.a >>>>>> with libicu-le-hb.a in order to replace libicule.a. >>>>> You don't need libharfbuzz-icu to use icu-le-hb. Same way that ICU Layout >>>>> doesn't actually depend on the rest of ICU. :) >>>>> >>>>> behdad >>>>> >>>>>> Again, thank you for replying! It's much appreciated :) >>>>>> >>>>>> Anita >>>>>> > > > _______________________________________________ > HarfBuzz mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/harfbuzz -- IBMer but all opinions are mine. https://www.ohloh.net/accounts/srl295 // fingerprint @ https://ssl.icu-project.org/trac/wiki/Srl
signature.asc
Description: OpenPGP digital signature
_______________________________________________ HarfBuzz mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/harfbuzz
