Message ID | 1659365.rXFWKSb4nS@polaris |
---|---|
State | New |
Headers | show |
On Tue, Oct 23, 2012 at 2:11 PM, Eric Botcazou <ebotcazou@adacore.com> wrote: > > 2012-10-23 Eric Botcazou <ebotcazou@adacore.com> > > PR bootstrap/54820 > * configure.ac (have_static_libs): Force 'no' for GCC version < 4.5. > * configure: Regenerate. This is OK. Thanks. Ian
Two test cases, debug_msg_so.err and debug_msg_ndebug.err, are still broken by the original patch, because (a) debug_msg.so has a DT_NEEDED entry for libstdc++.so, (b) the use of -static-libstdc++ means that that DT_NEEDED entry is unknown when we link the executable, and (c) the undefined symbols in debug_msg.so will not be printed. The obvious solution would be to add an option to cancel -static-libstdc++, but there doesn't seem to be one. (There is a -shared-libgcc option, but no -shared-libstdc++.) I've tested two alternatives that work: (1) Force the issue by explicitly adding -Bdynamic -lstdc++ to the link flags for debug_msg_so and debug_msg_ndebug. (2) Remove the DT_NEEDED entry from debug_msg.so by linking it with -static-libstdc++ also. Which one seems preferable? Any better ideas? -cary On Tue, Oct 23, 2012 at 2:54 PM, Ian Lance Taylor <iant@google.com> wrote: > On Tue, Oct 23, 2012 at 2:11 PM, Eric Botcazou <ebotcazou@adacore.com> wrote: >> >> 2012-10-23 Eric Botcazou <ebotcazou@adacore.com> >> >> PR bootstrap/54820 >> * configure.ac (have_static_libs): Force 'no' for GCC version < 4.5. >> * configure: Regenerate. > > This is OK. > > Thanks. > > Ian
On Wed, Dec 19, 2012 at 6:13 PM, Cary Coutant <ccoutant@google.com> wrote: > Two test cases, debug_msg_so.err and debug_msg_ndebug.err, are still > broken by the original patch, because (a) debug_msg.so has a DT_NEEDED > entry for libstdc++.so, (b) the use of -static-libstdc++ means that > that DT_NEEDED entry is unknown when we link the executable, and (c) > the undefined symbols in debug_msg.so will not be printed. > > The obvious solution would be to add an option to cancel > -static-libstdc++, but there doesn't seem to be one. (There is a > -shared-libgcc option, but no -shared-libstdc++.) I've tested two > alternatives that work: > > (1) Force the issue by explicitly adding -Bdynamic -lstdc++ to the > link flags for debug_msg_so and debug_msg_ndebug. > > (2) Remove the DT_NEEDED entry from debug_msg.so by linking it with > -static-libstdc++ also. > > Which one seems preferable? Any better ideas? Adding -Bdynamic seems fine to me. And I guess GCC should have a -shared-libstdc++ option. Ian
Index: configure.ac =================================================================== --- configure.ac (revision 192666) +++ configure.ac (working copy) @@ -1190,7 +1190,11 @@ if test "$GCC" = yes; then LDFLAGS="$LDFLAGS -static-libstdc++ -static-libgcc" AC_MSG_CHECKING([whether g++ accepts -static-libstdc++ -static-libgcc]) AC_LANG_PUSH(C++) - AC_LINK_IFELSE([int main() {}], + AC_LINK_IFELSE([ +#if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) +#error -static-libstdc++ not implemented +#endif +int main() {}], [AC_MSG_RESULT([yes]); have_static_libs=yes], [AC_MSG_RESULT([no])]) AC_LANG_POP(C++)