OSDN Git Service

We should link against -lc before any of the binutils libs (libiberty/bfd)
authorDavid McCullough <davidm@snapgear.com>
Sun, 2 Nov 2008 23:13:45 +0000 (23:13 +0000)
committerDavid McCullough <davidm@snapgear.com>
Sun, 2 Nov 2008 23:13:45 +0000 (23:13 +0000)
as those libs provide replacements for some common functions we don't really
care about (like getopt).  Otherwise, if the C library does something wacky
in its API (like renaming symbols), we get a desync where some symbols are
provided by the binutils libs while others are provided by the C library.

For a concrete example, try building elf2flt on OS X 10.5.  Their stupid
headers do this in unistd.h:

int getopt(int, char * const [], const char *) __asm("_" "getopt" "$UNIX2003");

The resulting elf2flt binaries are incapable of properly parsing any option
given to them.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
configure.in

index 42be556..5ab8983 100644 (file)
@@ -135,6 +135,13 @@ Run configure again specifying these options:
 ])
 fi
 
+dnl Make sure we resolve system symbols before libiberty/libbfd ones.
+dnl Otherwise, things like getopt get screwed up because the system headers
+dnl redirect some functions to the system symbols, but other local symbols
+dnl come from libiberty/libbfd.
+dnl int getopt(int, char * const [], const char *) __asm("_" "getopt" "$UNIX2003");
+AC_CHECK_LIB(c, malloc, LIBS="-lc $LIBS")
+
 dnl Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS(fcntl.h unistd.h bfd.h)