Our product uses Eclipse Platform for GUI on Linux. We
support many OS systems and provide one binaries set
for all systems (I mean one set for each platform). For
IA32 architecture we use gcc-3.3 C++ runtime (we
provide it with our product) for all systems.
Recently we found C++ ABI problems on RedFlag 5 DC
(Asianux 2.0) - this system uses SCIM by default for
input chinese symbols.
When we start our product by starting Eclipse - it
starts GTK and GTK starts SCIM by default. After
loading SCIM immodule library
(/usr/lib/gtk-2.0/immodules/im-scim.so) our non-native
for this system runtime conflicts with SCIM library -
some C++ STL symbols from our runtime and our libraries
is bound to such symbols from im-scim.so (because
im-scim.so is loaded one of the first). It means that
im-scim.so exports its C++ STL inline symbols and such
symbol from another library can be bound to this
symbol! There is no problem in case of all libraries
use one C++ runtime, but there is a BIG problem in case
of some libraries uses another non-native runtime!
Asianux 2.0 contains SCIM-1.2.3, I installed last SCIM
1.4.4 and determined that this problem is reproduced also.
I looked to scim-bridge project which was created to
solve C++ ABI problems (as I understand). but
scim-bridge uses im-scim.so also and this problem is
reproduced using scim-bridge also!
I think SCIM should hide all C++ STL inline symbols
from all libraries which can be loaded by window
library (such GTK) because it may affect user
application compiled with another runtime.
So, you can hide your C++ STL inline symbols using
). You may use simple script to hide all STD symbols
from library export table:
---- begin of version.script file -----
---- end of version.script file -----
Just modify your linker command by adding one new option:
... -Wl,-version-script,version.script ...
Thank you for your attention!