------- You are receiving this mail because: ------- You are on the CC list for the bug.
http://bugs.exim.org/show_bug.cgi?id=1278 Summary: pcre 8.31 fails to link with Sun Studio 12 on Solaris 10 Update 10 Product: PCRE Version: 8.31 Platform: Sun URL: http://www.blastwave.org OS/Version: Solaris Status: NEW Severity: bug Priority: high Component: Code AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] CC: [email protected] So the environment is a nice new Oracle Solaris 10 box thus : $ uname -a SunOS node002 5.10 Generic_147440-22 sun4v sparc SUNW,T5240 $ prtconf -v | grep Memory prtconf: devinfo facility not available Memory size: 8192 Megabytes $ psrinfo -pv The physical processor has 64 virtual processors (0-63) UltraSPARC-T2+ (chipid 0, clock 1582 MHz) The physical processor has 64 virtual processors (64-127) UltraSPARC-T2+ (chipid 1, clock 1582 MHz) $ which cc /opt/SUNWspro/bin/cc $ cc -V cc: Sun C 5.9 SunOS_sparc Patch 124867-16 2010/08/11 usage: cc [ options] files. Use 'cc -flags' for details $ which CC /opt/SUNWspro/bin/CC $ CC -V CC: Sun C++ 5.9 SunOS_sparc Patch 124863-27 2011/08/09 The user environment is : $ env | sort AS=/usr/ccs/bin/as CC=/opt/SUNWspro/bin/cc CFLAGS=-erroff -xstrconst -xildoff -m64 -xmemalign=8s -xnolibmil -Xa -xcode=pic32 -xregs=no%appl -xlibmieee -mc -g -xs -D_TS_ERRNO -ftrap=%none -Qy -xbuiltin=%none -xdebugformat=dwarf -xunroll=1 -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE COLUMNS=124 CONFIG_SHELL=/bin/bash CPPFLAGS=-I/usr/local/include -I/usr/local/include/readline CXX=/opt/SUNWspro/bin/CC CXXFLAGS=-erroff -m64 -R/usr/local/lib -L/usr/local/lib -mc -xO3 -xs -D_TS_ERRNO EDITOR=/usr/xpg4/bin/vi HOME=/export/home/dclarke LANG=C LC_ALL=C LC_COLLATE=C LC_CTYPE=C LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C LD=/usr/ccs/bin/ld LD_LIBRARY_PATH=/usr/local/lib LD_OPTIONS=-Qy -L/usr/local/lib LD_RUN_PATH=/usr/local/lib/$ISALIST:/usr/local/lib LINES=40 LOGNAME=dclarke M4=/usr/local/bin/gm4 MAIL=/usr/mail/dclarke MANPATH=/usr/share/man:/usr/X11/share/man PAGER=/usr/xpg4/bin/more PATH=/usr/local/bin:/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/opt/SUNWspro/bin:/usr/bin:/sbin:/bin:/usr/sbin:/usr/dt/bin:/usr/openwin/bin:/opt/schily/bin PKG_CONFIG_PATH=/usr/local/lib/pkgconfig PWD=/usr/local/build/pcre-8.31_sparcv9_001 SHELL=/bin/bash SRC=/usr/local/src SSH_CLIENT=66.103.61.128 56173 22 SSH_CONNECTION=66.103.61.128 56173 66.225.151.250 22 SSH_TTY=/dev/pts/2 TERM=vt100 TZ=GMT0 USER=dclarke VISUAL=/usr/xpg4/bin/vi _=/usr/xpg4/bin/env I will extract from the source tarball so that this is a clean test : $ ls $SRC/pcre* /usr/local/src/pcre-8.30.tar.gz /usr/local/src/pcre-8.31.tar.gz $ mdigest -a sha256 /usr/local/src/pcre-8.31.tar.gz 4e1f5d462796fdf782650195050953b8503b2a2fc05c31b681c2d5d54d1f659b /usr/local/src/pcre-8.31.tar.gz $ sx /usr/local/src/pcre-8.31.tar.gz star: fifo had 737 puts 602 gets. star: fifo was 1 times empty and 0 times full. star: fifo held 7016960 bytes max, size was 33556480 bytes star: fifo is 0% full (8k), size 32770k. star: 737 blocks + 0 bytes (total of 7546880 bytes = 7370.00k). star: Total time 2.119sec (3478 kBytes/sec) n.b.:sx is an alias sx='/opt/schily/bin/star -x -z -xdir -xdot -U -fs=32m -fifostats -time file= ' Jorg Schillings star can extract anything from anything :-) $ mv pcre-8.31 pcre-8.31_sparcv9_002 $ ./configure --enable-dependency-tracking --enable-pcre16 --enable-utf \ > --enable-shared --enable-static --with-link-size=4 \ > --disable-stack-for-recursion --enable-pcregrep-libz --enable-pcregrep-libbz2 > \ > --with-pcregrep-bufsize=64K --enable-pcretest-libreadline --without-gnu-ld checking for a BSD-compatible install... ./install-sh -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... ./install-sh -c -d checking for gawk... no checking for mawk... no checking for nawk... nawk checking whether make sets $(MAKE)... yes checking for gcc... /opt/SUNWspro/bin/cc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... no checking whether /opt/SUNWspro/bin/cc accepts -g... yes checking for /opt/SUNWspro/bin/cc option to accept ISO C89... none needed checking for style of include used by make... GNU checking dependency style of /opt/SUNWspro/bin/cc... dashXmstdout checking whether we are using the GNU C++ compiler... no checking whether /opt/SUNWspro/bin/CC accepts -g... yes checking dependency style of /opt/SUNWspro/bin/CC... dashXmstdout checking how to run the C preprocessor... /opt/SUNWspro/bin/cc -E checking for grep that handles long lines and -e... /usr/xpg4/bin/grep checking for egrep... /usr/xpg4/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for int64_t... yes checking build system type... sparc-sun-solaris2.10 checking host system type... sparc-sun-solaris2.10 checking how to print strings... printf checking for a sed that does not truncate output... /usr/local/bin/gsed checking for fgrep... /usr/xpg4/bin/grep -F checking for non-GNU ld... /usr/ccs/bin/ld checking if the linker (/usr/ccs/bin/ld) is GNU ld... no checking for BSD- or MS-compatible name lister (nm)... /usr/xpg4/bin/nm -p checking the name lister (/usr/xpg4/bin/nm -p) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 786240 checking whether the shell understands some XSI constructs... no checking whether the shell understands "+="... no checking how to convert sparc-sun-solaris2.10 file names to sparc-sun-solaris2.10 format... func_convert_file_noop checking how to convert sparc-sun-solaris2.10 file names to toolchain format... func_convert_file_noop checking for /usr/ccs/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... dlltool checking how to associate runtime and link libraries... printf %s\n checking for ar... ar checking for archiver @FILE support... no checking for strip... strip checking for ranlib... ranlib checking command to parse /usr/xpg4/bin/nm -p output from /opt/SUNWspro/bin/cc object... ok checking for sysroot... no checking for mt... mt checking if mt is a manifest tool... no checking for dlfcn.h... yes checking for objdir... .libs checking for /opt/SUNWspro/bin/cc option to produce PIC... -KPIC -DPIC checking if /opt/SUNWspro/bin/cc PIC flag -KPIC -DPIC works... yes checking if /opt/SUNWspro/bin/cc static flag -Bstatic works... no checking if /opt/SUNWspro/bin/cc supports -c -o file.o... yes checking if /opt/SUNWspro/bin/cc supports -c -o file.o... (cached) yes checking whether the /opt/SUNWspro/bin/cc linker (/usr/ccs/bin/ld -64) supports shared libraries... yes checking dynamic linker characteristics... solaris2.10 ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... no checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking how to run the C++ preprocessor... /opt/SUNWspro/bin/CC -E checking whether the /opt/SUNWspro/bin/CC linker (/usr/ccs/bin/ld -64) supports shared libraries... yes checking for /opt/SUNWspro/bin/CC option to produce PIC... -KPIC -DPIC checking if /opt/SUNWspro/bin/CC PIC flag -KPIC -DPIC works... yes checking if /opt/SUNWspro/bin/CC static flag -Bstatic works... no checking if /opt/SUNWspro/bin/CC supports -c -o file.o... yes checking if /opt/SUNWspro/bin/CC supports -c -o file.o... (cached) yes checking whether the /opt/SUNWspro/bin/CC linker (/usr/ccs/bin/ld -64) supports shared libraries... yes checking dynamic linker characteristics... solaris2.10 ld.so checking how to hardcode library paths into programs... immediate checking whether ln -s works... yes checking for ANSI C header files... (cached) yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking for sys/types.h... (cached) yes checking for sys/stat.h... (cached) yes checking dirent.h usability... yes checking dirent.h presence... yes checking for dirent.h... yes checking windows.h usability... no checking windows.h presence... no checking for windows.h... no checking for alias support in the linker... no checking for alias support in the linker... yes checking string usability... yes checking string presence... yes checking for string... yes checking bits/type_traits.h usability... no checking bits/type_traits.h presence... no checking for bits/type_traits.h... no checking type_traits.h usability... no checking type_traits.h presence... no checking for type_traits.h... no checking for strtoq... no checking for strtoll... yes checking for long long... yes checking for unsigned long long... yes checking for an ANSI C-conforming const... yes checking for size_t... yes checking for bcopy... yes checking for memmove... yes checking for strerror... yes checking zlib.h usability... yes checking zlib.h presence... yes checking for zlib.h... yes checking for gzopen in -lz... yes checking bzlib.h usability... yes checking bzlib.h presence... yes checking for bzlib.h... yes checking for libbz2... yes checking readline/readline.h usability... yes checking readline/readline.h presence... yes checking for readline/readline.h... yes checking readline/history.h usability... yes checking readline/history.h presence... yes checking for readline/history.h... yes checking for readline in -lreadline... no checking for readline in -lreadline... no checking for readline in -lreadline... yes -lreadline needs -lcurses configure: creating ./config.status config.status: creating Makefile config.status: creating libpcre.pc config.status: creating libpcre16.pc config.status: creating libpcreposix.pc config.status: creating libpcrecpp.pc config.status: creating pcre-config config.status: creating pcre.h config.status: creating pcre_stringpiece.h config.status: creating pcrecpparg.h config.status: creating config.h config.status: executing depfiles commands config.status: executing libtool commands config.status: executing script-chmod commands config.status: executing delete-old-chartables commands pcre-8.31 configuration summary: Install prefix .................. : /usr/local C preprocessor .................. : /opt/SUNWspro/bin/cc -E C compiler ...................... : /opt/SUNWspro/bin/cc C++ preprocessor ................ : /opt/SUNWspro/bin/CC -E C++ compiler .................... : /opt/SUNWspro/bin/CC Linker .......................... : /usr/ccs/bin/ld -64 C preprocessor flags ............ : -I/usr/local/include -I/usr/local/include/readline C compiler flags ................ : -erroff -xstrconst -xildoff -m64 -xmemalign=8s -xnolibmil -Xa -xcode=pic32 -xregs=no%appl -xlibmieee -mc -g -xs -D_TS_ERRNO -ftrap=%none -Qy -xbuiltin=%none -xdebugformat=dwarf -xunroll=1 -D_POSIX_PTHREAD_SEMANTICS -D_LARGEFILE64_SOURCE C++ compiler flags .............. : -erroff -m64 -R/usr/local/lib -L/usr/local/lib -mc -xO3 -xs -D_TS_ERRNO Linker flags .................... : Extra libraries ................. : Build 8 bit pcre library ........ : yes Build 16 bit pcre library ....... : yes Build C++ library ............... : yes Enable JIT compiling support .... : no Enable UTF-8/16 support ......... : yes Unicode properties .............. : no Newline char/sequence ........... : lf \R matches only ANYCRLF ......... : no EBCDIC coding ................... : no Rebuild char tables ............. : no Use stack recursion ............. : no POSIX mem threshold ............. : 10 Internal link size .............. : 4 Match limit ..................... : 10000000 Match limit recursion ........... : MATCH_LIMIT Build shared libs ............... : yes Build static libs ............... : yes Use JIT in pcregrep ............. : no Buffer size for pcregrep ........ : 8192 Link pcregrep with libz ......... : yes Link pcregrep with libbz2 ....... : yes Link pcretest with libedit ...... : no Link pcretest with libreadline .. : yes $ which gmake /usr/local/bin/gmake $ $ gmake --version GNU Make 3.82 Built for sparc-sun-solaris2.10 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. $ $ gmake rm -f pcre_chartables.c ln -s ./pcre_chartables.c.dist pcre_chartables.c gmake all-am gmake[1]: Entering directory `/usr/local/build/pcre-8.31_sparcv9_002' CC pcre_byte_order.lo CC pcre_compile.lo CC pcre_config.lo CC pcre_dfa_exec.lo CC pcre_exec.lo CC pcre_fullinfo.lo CC pcre_get.lo CC pcre_globals.lo CC pcre_jit_compile.lo CC pcre_maketables.lo CC pcre_newline.lo CC pcre_ord2utf8.lo CC pcre_refcount.lo CC pcre_string_utils.lo CC pcre_study.lo CC pcre_tables.lo CC pcre_ucd.lo CC pcre_valid_utf8.lo CC pcre_version.lo CC pcre_xclass.lo CC pcre_chartables.lo CCLD libpcre.la ld: warning: option -Q appears more than once, first setting taken CC pcre16_byte_order.lo CC pcre16_chartables.lo CC pcre16_compile.lo CC pcre16_config.lo CC pcre16_dfa_exec.lo CC pcre16_exec.lo CC pcre16_fullinfo.lo CC pcre16_get.lo CC pcre16_globals.lo CC pcre16_jit_compile.lo CC pcre16_maketables.lo CC pcre16_newline.lo CC pcre16_ord2utf16.lo CC pcre16_refcount.lo CC pcre16_string_utils.lo CC pcre16_study.lo CC pcre16_tables.lo CC pcre16_ucd.lo CC pcre16_utf16_utils.lo CC pcre16_valid_utf16.lo CC pcre16_version.lo CC pcre16_xclass.lo CCLD libpcre16.la ld: warning: option -Q appears more than once, first setting taken CC pcreposix.lo CCLD libpcreposix.la ld: warning: option -Q appears more than once, first setting taken CXX pcrecpp.lo CXX pcre_scanner.lo CXX pcre_stringpiece.lo CXXLD libpcrecpp.la ld: fatal: unrecognized option '-_' ld: fatal: unrecognized option '-_' ld: fatal: unrecognized option '-Z' ld: fatal: use the -z help option for usage information gmake[1]: *** [libpcrecpp.la] Error 1 gmake[1]: Leaving directory `/usr/local/build/pcre-8.31_sparcv9_002' gmake: *** [all] Error 2 $ If you wonder why the "option -Q appears more than once" warnings then that is due to : $ echo $LD_OPTIONS -Qy -L/usr/local/lib Harmless as it simply adds a line in the .comment section of the ELF output and from manpage we see : -Q y | n Under -Q y, an ident string is added to the .comment section of the output file. This string identifies the version of the ld used to create the file. This results in multiple ld idents when there have been multiple linking steps, such as when using ld -r. This identifi- cation is identical with the default action of the cc command. -Q n suppresses version identification. .com- ment sections can be manipulated by the mcs(1) utility. Thus in the Solaris world we get helpful data like this : $ mcs -p pcre_stringpiece.o pcre_stringpiece.o: @(#)stddef.h 1.18 04/09/28 SMI @(#)isa_defs.h 1.30 11/03/31 SMI @(#)stddef_iso.h 1.2 03/03/06 SMI @(#)stdarg.h 1.47 04/09/28 SMI @(#)stdarg_iso.h 1.4 04/11/19 SMI @(#)va_impl.h 1.1 04/11/19 SMI @(#)va_list.h 1.15 04/11/19 SMI @(#)stdarg_c99.h 1.2 04/09/28 SMI @(#)feature_tests.h 1.26 11/04/12 SMI @(#)ccompile.h 1.2 04/11/08 SMI @(#)string.h 1.27 07/01/14 SMI @(#)string_iso.h 1.5 04/06/18 SMI @(#)ctype.h 1.35 04/09/28 SMI @(#)ctype_iso.h 1.3 04/09/28 SMI @(#)ctype_c99.h 1.2 04/09/28 SMI @(#)wchar.h 1.37 03/12/04 SMI @(#)wchar_iso.h 1.8 04/09/28 SMI @(#)stdio_tag.h 1.4 04/09/28 SMI @(#)wchar_impl.h 1.3 99/07/26 SMI @(#)time_iso.h 1.4 04/09/07 SMI @(#)wchar_c99.h 1.3 04/03/29 SMI @(#)wctype.h 1.19 03/12/04 SMI @(#)wctype_iso.h 1.2 03/12/04 SMI @(#)wctype_c99.h 1.1 03/12/04 SMI @(#)stdlib.h 1.51 04/06/30 SMI @(#)stdlib_iso.h 1.9 04/09/28 SMI @(#)stdlib_c99.h 1.2 04/03/29 SMI @(#)limits.h 1.60 11/04/12 SMI @(#)limits_iso.h 1.2 03/12/04 SMI @(#)int_limits.h 1.9 04/09/28 SMI @(#)pthread.h 1.37 04/09/28 SMI @(#)types.h 1.87 10/10/07 SMI @(#)machtypes.h 1.13 99/05/04 SMI @(#)int_types.h 1.10 04/09/28 SMI @(#)select.h 1.19 04/01/28 SMI @(#)time_impl.h 1.11 05/05/19 SMI @(#)time.h 2.78 12/02/01 SMI @(#)time.h 1.45 08/01/09 SMI @(#)sched.h 1.10 03/03/06 SMI @(#)stdio.h 1.85 11/01/07 SMI @(#)stdio_iso.h 1.8 05/08/16 SMI @(#)stdio_impl.h 1.15 07/03/05 SMI @(#)stdio_c99.h 1.2 04/03/29 SMI @(#)math.h 2.25 09/05/19 SMI @(#)math_iso.h 1.9 04/10/23 SMI @(#)math_c99.h 1.10 09/05/19 SMI @(#)float.h 1.22 04/09/28 SMI The linkage failure for libpcrecpp.la seems to be caused by this bizarre bit in the Makefile : EXTRA_LIBPCRE16_LDFLAGS = -version-info 0:1:0 EXTRA_LIBPCRECPP_LDFLAGS = -Wl,-i__ZN7pcrecpp6no_argE:__ZN7pcrecpp2RE6no_argE -version-info 0:0: 0 EXTRA_LIBPCREPOSIX_LDFLAGS = -version-info 0:1:0 EXTRA_LIBPCRE_LDFLAGS = -version-info 1:1:0 whatever that is, it looks horrific. Cleaning out all the whitespace I get : EXTRA_LIBPCRE16_LDFLAGS = -version-info 0:1:0 EXTRA_LIBPCRECPP_LDFLAGS = -Wl,-i__ZN7pcrecpp6no_argE:__ZN7pcrecpp2RE6no_argE -version-info 0:0:0 EXTRA_LIBPCREPOSIX_LDFLAGS = -version-info 0:1:0 EXTRA_LIBPCRE_LDFLAGS = -version-info 1:1:0 It looks as if we are trying ot pass the ( mildly scary ) argument '-i__ZN7pcrecpp6no_argE:__ZN7pcrecpp2RE6no_argE' to the link editor ld. The first problem here is that the option -i does not mean very much to the Solaris linker ld. The other issue is that even on GNU Linux the -i option not be what we want. I am going to make a guess and hope that what we are trying to do is set the name ofthe entry point in the ELF executable or shared object to either _ZN7pcrecpp6no_argE or maybe _ZN7pcrecpp2RE6no_argE ? I was hoping for "_init" but who knows. Now then what is this "-version-info " noise? That looks to be something for libtool. I would say that somehow the pcre makefile has junmped the shark out of the POSIX UNIX waters and into GNU Linux land and on Solaris that simply will not fly. -- Configure bugmail: http://bugs.exim.org/userprefs.cgi?tab=email -- ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev
