[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: lib-ignore: link error with Sun C++ compiler
From: |
Bruno Haible |
Subject: |
Re: lib-ignore: link error with Sun C++ compiler |
Date: |
Sun, 28 Mar 2010 10:33:16 +0100 |
User-agent: |
KMail/1.9.9 |
> * Bruno Haible wrote on Sat, Mar 20, 2010 at 11:52:25PM CET:
> > lib-ignore: Determine different options for different compilers.
> > * m4/lib-ignore.m4 (gl_IGNORE_UNUSED_LIBRARIES): Set a variable which
> > depends on the current language (C/C++/Fortran). Don't set LDFLAGS.
> > Add comments.
> > (_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS): New macro.
> > * NEWS: Mention the change.
I've committed this patch now, including Ralf's comments about libtool, below.
Jim, for coreutils, I propose this patch:
=============================================================================
2010-03-28 Bruno Haible <address@hidden>
Update after change in gnulib's lib-ignore module.
* src/Makefile.am (AM_LDFLAGS): New variable.
--- src/Makefile.am.orig Sun Mar 28 11:31:05 2010
+++ src/Makefile.am Sun Mar 28 11:30:27 2010
@@ -170,6 +170,9 @@
noinst_LIBRARIES = libver.a
nodist_libver_a_SOURCES = version.c version.h
+# Tell the linker to omit references to unused shared libraries.
+AM_LDFLAGS = $(IGNORE_UNUSED_LIBRARIES_CFLAGS)
+
# Sometimes, the expansion of $(LIBINTL) includes -lc which may
# include modules defining variables like `optind', so libcoreutils.a
# must precede $(LIBINTL) in order to ensure we use GNU getopt.
=============================================================================
2010-03-28 Bruno Haible <address@hidden>
Ralf Wildenhues <address@hidden>
lib-ignore: Determine different options for different compilers.
* m4/lib-ignore.m4 (gl_IGNORE_UNUSED_LIBRARIES): Set a variable which
depends on the current language (C/C++/Fortran). Don't set LDFLAGS.
Add comments.
(_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS): New macro.
* NEWS: Mention the change.
*** NEWS.orig Sun Mar 28 11:23:19 2010
--- NEWS Sun Mar 28 11:23:01 2010
***************
*** 6,11 ****
--- 6,17 ----
Date Modules Changes
+ 2010-03-28 lib-ignore This module now provides a variable
+ IGNORE_UNUSED_LIBRARIES_CFLAGS that you should
+ add to LDFLAGS (when linking C programs only) or
+ CFLAGS yourself. It is no longer added to LDFLAGS
+ automatically.
+
2010-03-18 pty This module now only declares the pty.h header.
Use the new modules 'forkpty' or 'openpty' to
get the functions that were previously provided.
*** m4/lib-ignore.m4.orig Sun Mar 28 11:23:19 2010
--- m4/lib-ignore.m4 Sun Mar 28 11:21:08 2010
***************
*** 7,17 ****
dnl Written by Paul Eggert.
AC_DEFUN([gl_IGNORE_UNUSED_LIBRARIES],
[
! AC_CACHE_CHECK([for flag to ignore unused libraries],
! [gl_cv_ignore_unused_libraries],
! [gl_cv_ignore_unused_libraries=none
gl_saved_ldflags=$LDFLAGS
gl_saved_libs=$LIBS
# Link with -lm to detect binutils 2.16 bug with --as-needed; see
--- 7,55 ----
dnl Written by Paul Eggert.
+ # gl_IGNORE_UNUSED_LIBRARIES
+ # --------------------------
+ # Determines the option to be passed to the C/C++/Fortran compiler, so that it
+ # omits unused libraries.
+ # Example (on Solaris):
+ # $ cc foo.c -lnsl; ldd ./a.out
+ # libnsl.so.1 => /lib/libnsl.so.1
+ # libc.so.1 => /lib/libc.so.1
+ # libmp.so.2 => /lib/libmp.so.2
+ # libmd.so.1 => /lib/libmd.so.1
+ # libscf.so.1 => /lib/libscf.so.1
+ # libdoor.so.1 => /lib/libdoor.so.1
+ # libuutil.so.1 => /lib/libuutil.so.1
+ # libgen.so.1 => /lib/libgen.so.1
+ # libm.so.2 => /lib/libm.so.2
+ # $ cc foo.c -lnsl -Wl,-z,ignore; ldd ./a.out
+ # libc.so.1 => /lib/libc.so.1
+ # libm.so.2 => /lib/libm.so.2
+ #
+ # Note that the option works only for the C compiler, not for the C++
+ # compiler:
+ # - Sun C likes '-Wl,-z,ignore'.
+ # '-Qoption ld -z,ignore' is not accepted.
+ # '-z ignore' is accepted but has no effect.
+ # - Sun C++ and Sun Fortran like '-Qoption ld -z,ignore'.
+ # '-Wl,-z,ignore' is not accepted.
+ # '-z ignore' is accepted but has no effect.
+ #
+ # Sets and substitutes a variable that depends on the current language:
+ # - IGNORE_UNUSED_LIBRARIES_CFLAGS for C
+ # - IGNORE_UNUSED_LIBRARIES_CXXFLAGS for C++
+ # - IGNORE_UNUSED_LIBRARIES_FFLAGS for Fortran
+ #
+ # Note that the option works only for direct invocation of the compiler, not
+ # through libtool: When libtool is used to create a shared library, it will
+ # honor and translate '-Wl,-z,ignore' to '-Qoption ld -z -Qoption ld ignore'
+ # if needed, but it will drop a '-Qoption ld -z,ignore' on the command line.
+ #
AC_DEFUN([gl_IGNORE_UNUSED_LIBRARIES],
[
! AC_CACHE_CHECK([for []_AC_LANG[] compiler flag to ignore unused libraries],
! [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries],
! [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=none
gl_saved_ldflags=$LDFLAGS
gl_saved_libs=$LIBS
# Link with -lm to detect binutils 2.16 bug with --as-needed; see
***************
*** 21,43 ****
# to forestall problems with linkers that have -z, -i, -g, -n, etc.
flags.
# GCC + binutils likes '-Wl,--as-needed'.
# GCC + Solaris ld likes '-Wl,-z,ignore'.
! # Sun C likes '-z ignore'.
# Don't try bare '--as-needed'; nothing likes it and the HP-UX 11.11
# native cc issues annoying warnings and then ignores it,
# which would cause us to incorrectly conclude that it worked.
! for gl_flags in \
! '-Wl,--as-needed' \
! '-Wl,-z,ignore' \
! '-z ignore'
do
LDFLAGS="$gl_flags $LDFLAGS"
AC_LINK_IFELSE([AC_LANG_PROGRAM()],
! [gl_cv_ignore_unused_libraries=$gl_flags])
LDFLAGS=$gl_saved_ldflags
! test "$gl_cv_ignore_unused_libraries" != none && break
done
! LIBS=$gl_saved_libs])
! test "$gl_cv_ignore_unused_libraries" != none &&
! LDFLAGS="$LDFLAGS $gl_cv_ignore_unused_libraries"
])
--- 59,115 ----
# to forestall problems with linkers that have -z, -i, -g, -n, etc.
flags.
# GCC + binutils likes '-Wl,--as-needed'.
# GCC + Solaris ld likes '-Wl,-z,ignore'.
! # Sun C likes '-Wl,-z,ignore'. '-z ignore' is accepted but has no effect.
# Don't try bare '--as-needed'; nothing likes it and the HP-UX 11.11
# native cc issues annoying warnings and then ignores it,
# which would cause us to incorrectly conclude that it worked.
! for gl_flags in _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS
do
LDFLAGS="$gl_flags $LDFLAGS"
AC_LINK_IFELSE([AC_LANG_PROGRAM()],
! [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=$gl_flags])
LDFLAGS=$gl_saved_ldflags
! test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none
&&
! break
done
! LIBS=$gl_saved_libs
! ])
! IGNORE_UNUSED_LIBRARIES_[]_AC_LANG_PREFIX[]FLAGS=
! if test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none;
then
!
IGNORE_UNUSED_LIBRARIES_[]_AC_LANG_PREFIX[]FLAGS="$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries"
! fi
! AC_SUBST([IGNORE_UNUSED_LIBRARIES_]_AC_LANG_PREFIX[FLAGS])
! ])
!
! # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS
! # -----------------------------------
! # Expands to the language dependent options to be tried.
! AC_DEFUN([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS],
! [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
!
! # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C)
! # --------------------------------------
! m4_define([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C)],
! [ '-Wl,--as-needed' \
! '-Wl,-z,ignore' \
! '-z ignore'
! ])
! # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)
! # ----------------------------------------
! m4_define([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)],
! [ '-Wl,--as-needed' \
! '-Qoption ld -z,ignore' \
! '-Wl,-z,ignore' \
! '-z ignore'
])
+
+ # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)
+ # -----------------------------------------------
+ m4_copy([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)],
+ [_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)])
+
+ # _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran)
+ # --------------------------------------------
+ m4_copy([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)],
+ [_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran)])
- lib-ignore: link error with Sun C++ compiler, Bruno Haible, 2010/03/07
- Re: lib-ignore: link error with Sun C++ compiler, Ralf Wildenhues, 2010/03/08
- Re: lib-ignore: link error with Sun C++ compiler, Bruno Haible, 2010/03/14
- Re: lib-ignore: link error with Sun C++ compiler, Ralf Wildenhues, 2010/03/15
- Re: lib-ignore: link error with Sun C++ compiler, Bruno Haible, 2010/03/20
- Re: lib-ignore: link error with Sun C++ compiler, Ralf Wildenhues, 2010/03/21
- Re: lib-ignore: link error with Sun C++ compiler, Bruno Haible, 2010/03/21
- Re: lib-ignore: link error with Sun C++ compiler,
Bruno Haible <=
- Re: lib-ignore: link error with Sun C++ compiler, Jim Meyering, 2010/03/29