libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sr #108201] libtool problems with -export-symbols-regex on solaris with


From: Richard PALO
Subject: [sr #108201] libtool problems with -export-symbols-regex on solaris with gcc-4.7.x
Date: Mon, 10 Dec 2012 13:58:03 +0000
User-agent: Mozilla/5.0 (X11; SunOS i86pc; rv:17.0) Gecko/17.0 Firefox/17.0

URL:
  <http://savannah.gnu.org/support/?108201>

                 Summary: libtool problems with -export-symbols-regex on
solaris with gcc-4.7.x
                 Project: GNU Libtool
            Submitted by: risto3
            Submitted on: lun. 10 déc. 2012 13:58:02 GMT
                Category: None
                Priority: 5 - Normal
                Severity: 4 - Important
                  Status: None
                 Privacy: Public
             Assigned to: None
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
        Operating System: *BSD

    _______________________________________________________

Details:

(I put *BSD because SunOS not available)

In trying to build rarian-0.8.1, it appears that the shared library
(librarian.so) is not built correctly.

I have I isolated the problem to the following statement in Makefile.am

librarian_la_LDFLAGS = -export-symbols-regex "^rrn_.*"

Here is the resulting libtool output for this command:
/bin/sh ../libtool --tag=CXX   --mode=link g++  -g -O2 -export-symbols-regex
"^rrn_.*"  -o librarian.la -rpath /usr/local/lib librarian_la-rarian-main.lo
librarian_la-rarian-reg-utils.lo librarian_la-rarian-language.lo
librarian_la-rarian-utils.lo librarian_la-rarian-info.lo
librarian_la-rarian-man.lo rarian-omf.lo tinyxml.lo tinyxmlparser.lo
tinystr.lo tinyxmlerror.lo

libtool: link: rm -fr  .libs/librarian.a .libs/librarian.exp
.libs/librarian.la .libs/librarian.lai .libs/librarian.so .libs/librarian.so.0
.libs/librarian.so.0.0.0
libtool: link: /opt/pkg/gnu/bin/nm -B  .libs/librarian_la-rarian-main.o
.libs/librarian_la-rarian-reg-utils.o .libs/librarian_la-rarian-language.o
.libs/librarian_la-rarian-utils.o .libs/librarian_la-rarian-info.o
.libs/librarian_la-rarian-man.o .libs/rarian-omf.o .libs/tinyxml.o
.libs/tinyxmlparser.o .libs/tinystr.o .libs/tinyxmlerror.o   | sed -n -e
's/^.*[  ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[         ][      
]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1
\2 \2/p' | sed '/ __gnu_lto/d' | /opt/pkg/bin/gsed 's/.* //' | sort | uniq >
.libs/librarian.exp
libtool: link: /opt/pkg/bin/ggrep -E -e "^rrn_.*" ".libs/librarian.exp" >
".libs/librarian.expT"
libtool: link: mv -f ".libs/librarian.expT" ".libs/librarian.exp"
libtool: link: echo "{ global:" > .libs/librarian.so.0.0.0.exp
libtool: link: cat .libs/librarian.exp | /opt/pkg/bin/gsed -e "s/\(.*\)/\1;/"
>> .libs/librarian.so.0.0.0.exp
libtool: link: echo "local: *; };" >> .libs/librarian.so.0.0.0.exp
libtool: link:  g++ -shared  -fPIC -DPIC -nostdlib -Wl,-M
-Wl,.libs/librarian.so.0.0.0.exp -o .libs/librarian.so.0.0.0
/usr/lib/amd64/crti.o /usr/lib/amd64/values-Xa.o
/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/crtbegin.o 
.libs/librarian_la-rarian-main.o .libs/librarian_la-rarian-reg-utils.o
.libs/librarian_la-rarian-language.o .libs/librarian_la-rarian-utils.o
.libs/librarian_la-rarian-info.o .libs/librarian_la-rarian-man.o
.libs/rarian-omf.o .libs/tinyxml.o .libs/tinyxmlparser.o .libs/tinystr.o
.libs/tinyxmlerror.o   -L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2
-L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/../../../../x86_64-sun-solaris2.11/lib/amd64
-L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/../../../amd64
-L/lib/amd64 -L/usr/lib/amd64
-L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/../../../../x86_64-sun-solaris2.11/lib
-L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/../../.. -lstdc++ -lm
-lc -lgcc_s /opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/crtend.o
/usr/lib/amd64/crtn.o  -O2  
libtool: link: rm -f .libs/librarian.so.0.0.0.exp
libtool: link: (cd ".libs" && rm -f "librarian.so.0" && ln -s
"librarian.so.0.0.0" "librarian.so.0")
libtool: link: (cd ".libs" && rm -f "librarian.so" && ln -s
"librarian.so.0.0.0" "librarian.so")
libtool: link: ar cru .libs/librarian.a  librarian_la-rarian-main.o
librarian_la-rarian-reg-utils.o librarian_la-rarian-language.o
librarian_la-rarian-utils.o librarian_la-rarian-info.o
librarian_la-rarian-man.o rarian-omf.o tinyxml.o tinyxmlparser.o tinystr.o
tinyxmlerror.o
libtool: link: ranlib .libs/librarian.a
libtool: link: ( cd ".libs" && rm -f "librarian.la" && ln -s "../librarian.la"
"librarian.la" )

If I suppress the -export-symbols-regex "^rrn_.*", the following is output:
libtool: link: rm -fr  .libs/librarian.a .libs/librarian.exp
.libs/librarian.la .libs/librarian.lai .libs/librarian.so .libs/librarian.so.0
.libs/librarian.so.0.0.0
libtool: link: g++ -shared  -fPIC -DPIC -nostdlib  /usr/lib/amd64/crti.o
/usr/lib/amd64/values-Xa.o
/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/crtbegin.o 
.libs/librarian_la-rarian-main.o .libs/librarian_la-rarian-reg-utils.o
.libs/librarian_la-rarian-language.o .libs/librarian_la-rarian-utils.o
.libs/librarian_la-rarian-info.o .libs/librarian_la-rarian-man.o
.libs/rarian-omf.o .libs/tinyxml.o .libs/tinyxmlparser.o .libs/tinystr.o
.libs/tinyxmlerror.o   -L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2
-L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/../../../../x86_64-sun-solaris2.11/lib/amd64
-L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/../../../amd64
-L/lib/amd64 -L/usr/lib/amd64
-L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/../../../../x86_64-sun-solaris2.11/lib
-L/opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/../../.. -lstdc++ -lm
-lc -lgcc_s /opt/pkg/gcc47/lib/gcc/x86_64-sun-solaris2.11/4.7.2/crtend.o
/usr/lib/amd64/crtn.o  -O2   -Wl,-h -Wl,librarian.so.0 -o
.libs/librarian.so.0.0.0
libtool: link: (cd ".libs" && rm -f "librarian.so.0" && ln -s
"librarian.so.0.0.0" "librarian.so.0")
libtool: link: (cd ".libs" && rm -f "librarian.so" && ln -s
"librarian.so.0.0.0" "librarian.so")
libtool: link: ar cru .libs/librarian.a  librarian_la-rarian-main.o
librarian_la-rarian-reg-utils.o librarian_la-rarian-language.o
librarian_la-rarian-utils.o librarian_la-rarian-info.o
librarian_la-rarian-man.o rarian-omf.o tinyxml.o tinyxmlparser.o tinystr.o
tinyxmlerror.o
libtool: link: ranlib .libs/librarian.a
libtool: link: ( cd ".libs" && rm -f "librarian.la" && ln -s "../librarian.la"
"librarian.la" )

the corresponding -Wl,-h -Wl,$soname is now generated.


In looking at libtool.m4 from the 2.4.2 sources, the following lines appear
suspect (in comparing with the GCC part a bit earlier in the code), follow the
$GXX with_gnu_ld=no branch:

           # GNU C++ compiler with Solaris linker
            if test "$GXX" = yes && test "$with_gnu_ld" = no; then
              _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
              if $CC --version | $GREP -v '^2\.7' > /dev/null; then
                _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib
$LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags
${wl}-h $wl$soname -o $lib'
                _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" >
$lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo
"local: *; };" >> $lib.exp~
                  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib
$predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM
$lib.exp'

                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used
when
                # linking a shared library.
                output_verbose_link_cmd='$CC -shared $CFLAGS -v
conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              else
                # g++ 2.7 appears to require `-G' NOT `-shared' on this
                # platform.
                _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS
$predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h
$wl$soname -o $lib'
                _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" >
$lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo
"local: *; };" >> $lib.exp~
                  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects
$libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'

                # Commands to make compiler produce verbose output that lists
                # what "hidden" libraries, object files and flags are used
when
                # linking a shared library.
                output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext
2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              fi





    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/support/?108201>

_______________________________________________
  Message posté via/par Savannah
  http://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]