On Tuesday October 29 2019 16:21:53 Chris Jones wrote:

>Not really. 
>
>Maybe it would help if you gave more details on how to try and reproduce what 
>you see...
>

For now, all I can say is that I'm trying to get a working icu-le-hb install, 
building with port:clang-5.0 and against port:[email protected] . Then whenever the 
dynamic loader loads the resulting library it fails with a message about a 
missing symbol. You can reproduce this with a very simple C programme that 
dlopen's the binary.

I'm seeing the same error on Linux (using the official clang 5 toolchain build 
and port:[email protected]).
- on Linux I can roll back to [email protected] and the icu-le-hb build against that icu 
version (1.0.3_0); that icu-le-hb library loads fine
- when I rebuild icu-le-hb against that same old [email protected], the resulting 
library fails to load with the same error.

Adding `-std=c++11` to CXXFLAGS or not does not seem to make a difference, nor 
using a different compiler (I tried clang-5, clang-6 and GCC 8.3.0 . 
What does help is adding `$(ICU_LIBS)` to the library link command in 
icu-le-hb-1.0.3/src/Makefile.

So in retrospect, apparently this issue was never discovered because libicuuc 
(which provides the class typeinfo symbol) always got to be loaded before 
libicu-le-hb , so the symbol was present in the application's address space. I 
could verify that with LD_PRELOAD (on Linux but I have to assume that the 
equivalent DYLD_INSERT_LIBRARIES trick would have the same effect on Mac). I'll 
file a ticket on trac.

BTW, what are the effects of setting `compiler.cxx_standard 2011`? Does it just 
set a minimal compiler version or does it also add a `-std=` flag somewhere?

Reply via email to