http://sourceware.org/bugzilla/show_bug.cgi?id=14852
Bug #: 14852 Summary: gnu ld can't use a library linked via solaris ld, if that library uses a library linked with GNU ld Product: binutils Version: 2.22 Status: NEW Severity: normal Priority: P2 Component: ld AssignedTo: unassig...@sourceware.org ReportedBy: pashev.i...@gmail.com Classification: Unclassified Created attachment 6741 --> http://sourceware.org/bugzilla/attachment.cgi?id=6741 test suite and binaries Suppose we have a library [number 1] linked with GNU ld, say libz. Then we use this library (libz) to create other library [number 2] (e. g. libzfs), but using illumos/solaris link-editor. Then if we try to link libzfs to some application using GNU ld we will fail. Error will look like: "undefined reference to `compr...@libz.so.1'" This is because symbol `compress' in libz has no version assosiated, and thus is of "base version" which is the soname. Default and hardcoded behavior of solaris link-editor is to import base versions into outputfile (I quess it is like the option --default-imported-symver for GNU ld). I'd rather think it's solaris linker bug (a kind of), but it looks more tricky, because solaris linker can use library number 2 without any issues. I'm attaching an archive with tests and precompiled libraries. Note, that GNU ld I use is patched to support alternative linker, and ld-gnu-to-sun is a wrapper for solaris ld. Build log: # LANG=C make -k gcc -shared -fpic -Wl,-h -Wl,libfoo-gnu.so -o libfoo-gnu.so -Wl,--version-script,foo.map libfoo.c gcc -shared -fpic -Wl,-h -Wl,libbar-gnu.so -o libbar-gnu.so -L. -lfoo-gnu -R \$ORIGIN libbar.c gcc -o app-gnu-libbar-gnu main.c -L. -lbar-gnu -Wl,-rpath,. -R \$ORIGIN LD_ALTEXEC=ld-gnu-to-sun gcc -shared -fpic -Wl,-h -Wl,libbar-sun.so -o libbar-sun.so -L. -lfoo-gnu -R \$ORIGIN libbar.c + exec /usr/bin/sunld -G -dy -z text -R $ORIGIN -Qy -o libbar-sun.so /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/crti.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/values-Xa.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/crtbegin.o -L. -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7 -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../../lib -L/lib/x86_64-illumos -L/lib/../lib -L/usr/lib/x86_64-illumos -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../.. -h libbar-sun.so -lfoo-gnu /var/tmp//ccgwa4JF.o -lgcc_s -lc -lgcc_s /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/crtend.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/crtn.o ld: warning: global symbol '_END_' has non-global binding: (file ./libfoo-gnu.so value=LOCL); ld: warning: global symbol '_START_' has non-global binding: (file ./libfoo-gnu.so value=LOCL); gcc -o app-gnu-libbar-sun main.c -L. -lbar-sun -Wl,-rpath,. -R \$ORIGIN ./libbar-sun.so: undefined reference to `f...@libfoo-gnu.so' collect2: error: ld returned 1 exit status make: *** [app-gnu-libbar-sun] Error 1 LD_ALTEXEC=ld-gnu-to-sun gcc -o app-sun-libbar-sun main.c -L. -lbar-sun -Wl,-rpath,. -R \$ORIGIN + exec /usr/bin/sunld -R $ORIGIN -Qy -o app-sun-libbar-sun /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/crt1.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/crti.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/values-Xa.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/crtbegin.o -L. -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7 -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../../lib -L/lib/x86_64-illumos -L/lib/../lib -L/usr/lib/x86_64-illumos -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../.. /var/tmp//ccvHaqLF.o -lbar-sun -rpath . -lgcc -lgcc_eh -lc -lgcc -lgcc_eh /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/crtend.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/crtn.o ld: warning: global symbol '_END_' has non-global binding: (file ./libfoo-gnu.so value=LOCL); ld: warning: global symbol '_START_' has non-global binding: (file ./libfoo-gnu.so value=LOCL); LD_ALTEXEC=ld-gnu-to-sun gcc -o app-sun-libbar-gnu main.c -L. -lbar-gnu -Wl,-rpath,. -R \$ORIGIN + exec /usr/bin/sunld -R $ORIGIN -Qy -o app-sun-libbar-gnu /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/crt1.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/crti.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/values-Xa.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/crtbegin.o -L. -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7 -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../../lib -L/lib/x86_64-illumos -L/lib/../lib -L/usr/lib/x86_64-illumos -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../.. /var/tmp//ccINaaMF.o -lbar-gnu -rpath . -lgcc -lgcc_eh -lc -lgcc -lgcc_eh /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/crtend.o /usr/lib/gcc/x86_64-pc-solaris2.11/4.7/../../../x86_64-illumos/crtn.o ld: warning: global symbol '_END_' has non-global binding: (file ./libbar-gnu.so value=LOCL); ld: warning: global symbol '_START_' has non-global binding: (file ./libbar-gnu.so value=LOCL); ld: warning: global symbol '_END_' has non-global binding: (file ./libfoo-gnu.so value=LOCL); ld: warning: global symbol '_START_' has non-global binding: (file ./libfoo-gnu.so value=LOCL); make: Target `all' not remade because of errors. -- Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils