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/ _______________________________________________ https://lists.gnu.org/mailman/listinfo/libtool