Hello Xojo developers,
there is something wrong with the way Xojo uses icu.
In your blog (http://blog.xojo.com/2015/04/27/linux_libicu_and_xojo_2015_release_2/) you say ‘This noticably reduces the size of built apps on Linux and allows security (and other) updates for ICU to be managed by the system. This is really the proper way to do things for Linux system libraries.’
This might be true, but if you want customers to provide their own version of libicu, you must build Xojo and applications generated by Xojo with a stable ABI. The icu homepage (See: http://userguide.icu-project.org/design) is pretty clear about that:
[quote]Here are the requirements for enabling binary compatibility for ICU4C:
- Applications must use only APIs that are marked as stable.
- Applications must use only plain C APIs, never C++.
- ICU must be built with function renaming disabled.
- Applications must be built using an ICU that was configured for binary compatibility.
- Use ICU version 3.0 or later.[/quote]
and a few lines below:
But that’s not what Xojo does, right?
As far as I can see, applications build by Xojo run only on Linux versions which ship libicu compiled WITHOUT “–disable-renamimg” (like Debian or Red Hat).
They do NOT run on distributions which ship libicu compiled WITH “–disable-renamimg”. People running Xojo applications on the latter distributions usually receive error messages like:
[quote]Runtime Error
Please report what caused this error along with the information below.
RuntimeCore/ICUStable.cpp: 148
Failure Condition: functionPtr
Could not resolve u_strFromUTF8[/quote]
As far as I can see, you have three options:
- You continue to use libicu WITHOUT “–disable-renaming”. In this case, Xojo applications will run only on Linux distributions that ship libicu build WITHOUT “-disable-renaming”. And they will run safely only if your customers have installed exactly the same version of libicu that you have. Applications created by Xojo may also run if customers have a different version of libicu, but this is risky - because ABI compatibility is not guaranteed. Strange things may happen.
- You switch to release-to-release binary compatibility (this is what icu programmers seem to recommend). But your binaries probably won’t run on Debian or Red Hat (I didn’t test that).
- You realize that neither option 1 nor 2 is optimal. A solution might be that you ship a compatible version of libicu with applications built with Xojo.