From: David McCullough Date: Sun, 2 Nov 2008 23:13:45 +0000 (+0000) Subject: We should link against -lc before any of the binutils libs (libiberty/bfd) X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=4565de8dfc8dcbf5b4499d370cda376982b4398c;p=elf2flt.git We should link against -lc before any of the binutils libs (libiberty/bfd) 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 --- diff --git a/configure.in b/configure.in index 42be556..5ab8983 100644 --- a/configure.in +++ b/configure.in @@ -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)