From: <Car...@hy...> - 2001-06-27 09:35:54
|
Helena, and the list: I believe I have tracked down the problems I found in ICU 1.8.1 for the Solaris X86 platform. I am running Solaris 8 (01/01 release), and the Forte 6 C and C++ compilers. Here is a modified list of the problems, which now provides the reasons for each of the errors in the release. 1) The 'configure' script generates a non-fatal error message during the test to determine if the Solaris system is a Sparc V9 chip. The error message is generated by the Sun C compiler, when the test is called from configure: "checking host system type... i386-pc-solaris2.8 checking if we have a 64-bit (sparcv9) compiler... CC: Warning: illegal option -xarch=v9 ignored no" This is because this particular compiler does not accept the -xarch=v9 switch, and it is complaining about the invalid option on the command line. This test can be skipped when configure finds that the processor type is i386. As you can see from the message above, it already has the information needed to determine if it can skip it. Currently, the message does no hard, as the default is set to no, and the failed test does not reset it. But it would be nice to eliminate the message, and clean up the actual test code in 'configure'. 2) The recent addition of the 3 lines at the end of the $ICUROOT/source/config/mh-solaris file cause all symbols to be removed from the libicudt18l.so symbol table. As a result, no program (including ICU) can find any converter, break file, or resource bundle. The culprit here is the line: BIR_LDFLAGS= -Wl,-M,$(NAME).map -Wl,-B,symbolic -Wl,-B,eliminate The last option, 'eliminate', is passed to the linker. Here is the explanation of this option, from the 'ld' man page: "-B eliminate Causes any global symbols not assigned to a version definition to be eliminated from the symbol table. This option achieves the same symbol elimination as the auto-elimination directive available as part of a mapfile version definition." Since we do not appear to be using versioning within the library, _ALL_ symbols are eliminated, including the 'icudata_dat' symbol, which the entire ICU product depends on, in order to locate any of the objects within the library file. This option is only used on Solaris X86 and older Solaris Sparc systems (i.e., non-v9-based systems). Editing the line to remove the '-Wl,-B,eliminate' will resolve the entire problem. After doing this, I was able to do a complete 'make ; make clean' and obtain 100% pass results on all the internal tests. 3) The 'rpath' switch: I was mistaken on this. The RPATH switch is not being used in the default makefiles. I was fooled by the truss output, where ICU was looking for the individual files, since it couldn't find any data in the shared data library. 4) Because of item 2 above, 'make check' always fails, with the indication that the default converter cannot be opened, no matter what the default converter happens to be. ** NOTE: This was recently reported to the list by zar...@ka..., but was incorrectly diagnosed as a missing converter file. Because of item 2 above, _ALL_ converters are missing (i.e., not globally exported from the library). But removing the 'eliminate' switch from the mh-solaris makefile fragment does solve the problem in a clean way. The map file 'icudt18l.map' in the build subdirectory hides all symbols except for the 'icudata_dat' symbol, and the required housekeeping symbols that are needed for the initialization and termination of the shared library. The output of 'nm -C -g libicudt18l.so' follows, showing the only symbols left in the file. As far as I can tell, these are the only problems in the build process, and I have attempted to show you exactly how to resolve them. I haven't had time to prepare a set of 'diffs' for the affected files, but it should be very easy for someone to update the files in CVS, and/or provide a set of replacement files for the configure and mh-solaris files. Since the changes are very limited, even a release note with instructions on the edits required would be a resonable response. Regards, --Carl ps: This has been an amazing release. Please give the ICU team my sincere thanks for an outstanding product. I've built the older versions of ICU on 5 platforms now, and the builds are amazingly clean. But this version has cleaned up so many little things in the build environment, it makes it much simpler to build and use. It has really matured! Bravo! libicudt18l.so Symbols: (Solaris 8 X86, native compiler) [Index] Value Size Type Bind Other Shndx Name [2886] | 8033624| 0|OBJT |GLOB |0 |16 |_DYNAMIC [2882] | 8033824| 0|OBJT |GLOB |0 |20 |_edata [2883] | 8033824| 0|OBJT |GLOB |0 |21 |_end [2885] | 7968063| 0|OBJT |GLOB |0 |14 |_etext [2891] | 0| 0|NOTY |WEAK |0 |UNDEF |_ex_deregister [2887] | 0| 0|NOTY |WEAK |0 |UNDEF |_ex_register [2884] | 8033600| 0|OBJT |GLOB |0 |15 |_GLOBAL_OFFSET_TABLE_ [2889] | 0| 0|OBJT |GLOB |0 |ABS |_PROCEDURE_LINKAGE_TABLE_ [2892] | 8556| 3816|OBJT |GLOB |0 |13 |icudata_dat [2890] | 0| 0|NOTY |WEAK |0 |UNDEF |void __Cimpl::cplus_fini() [__1cH__CimplKcplus_fini6F_v_] [2888] | 0| 0|NOTY |WEAK |0 |UNDEF |void __Cimpl::cplus_init() [__1cH__CimplKcplus_init6F_v_] [2881] | 0| 0|NOTY |WEAK |0 |UNDEF |void __Crun::do_exit_code_in_range(void*,void*) [__1cG__CrunVdo_exit_code_in_range6Fpv1_v_] |