| From fb71154012e634a5e780e93af5434bcdafaf2b24 Mon Sep 17 00:00:00 2001 |
| From: Justin Bronder <jsbronder@gmail.com> |
| Date: Mon, 15 Oct 2012 17:25:07 -0400 |
| Subject: [PATCH] configure: fix pthread linking |
| |
| - Update the pthread check to make sure that we don't need -lpthread when |
| compiling with -nostdlib. |
| |
| - Make sure that the necessary pthread library is passed to libtool. |
| |
| Fixes: |
| |
| $ ldd -r /usr/lib/libgtest.so |
| linux-vdso.so.1 (0x00007fffe7dff000) |
| libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/libstdc++.so.6 (0x00007fbe09a9f000) |
| libc.so.6 => /lib64/libc.so.6 (0x00007fbe096f7000) |
| libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/libgcc_s.so.1 (0x00007fbe094e1000) |
| libm.so.6 => /lib64/libm.so.6 (0x00007fbe091ee000) |
| /lib64/ld-linux-x86-64.so.2 (0x00007fbe0a005000) |
| undefined symbol: pthread_key_create (/usr/lib/libgtest.so) |
| undefined symbol: pthread_getspecific (/usr/lib/libgtest.so) |
| undefined symbol: pthread_key_delete (/usr/lib/libgtest.so) |
| undefined symbol: pthread_setspecific (/usr/lib/libgtest.so) |
| --- |
| Makefile.am | 1 + |
| m4/acx_pthread.m4 | 39 ++++++++++++++++++++++++++++++++++++++- |
| 2 files changed, 39 insertions(+), 1 deletions(-) |
| |
| diff --git a/Makefile.am b/Makefile.am |
| index cb350b7..db2606e 100644 |
| --- a/Makefile.am |
| +++ b/Makefile.am |
| @@ -181,6 +181,7 @@ endif |
| lib_LTLIBRARIES = lib/libgtest.la lib/libgtest_main.la |
| |
| lib_libgtest_la_SOURCES = src/gtest-all.cc |
| +lib_libgtest_la_LIBADD = $(AM_LIBS) |
| |
| pkginclude_HEADERS = \ |
| include/gtest/gtest-death-test.h \ |
| diff --git a/m4/acx_pthread.m4 b/m4/acx_pthread.m4 |
| index 2cf20de..7fba4d9 100644 |
| --- a/m4/acx_pthread.m4 |
| +++ b/m4/acx_pthread.m4 |
| @@ -339,7 +339,44 @@ if test "x$acx_pthread_ok" = xyes; then |
| # so it's not safe to assume that we may use pthreads |
| acx_pthread_ok=no |
| fi |
| - |
| + |
| + AC_MSG_CHECKING([whether what we have so far is sufficient with -nostdlib]) |
| + CFLAGS="-nostdlib $CFLAGS" |
| + # we need c with nostdlib |
| + LIBS="$LIBS -lc" |
| + AC_TRY_LINK([#include <pthread.h>], |
| + [pthread_t th; pthread_join(th, 0); |
| + pthread_attr_init(0); pthread_cleanup_push(0, 0); |
| + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], |
| + [done=yes],[done=no]) |
| + |
| + if test "x$done" = xyes; then |
| + AC_MSG_RESULT([yes]) |
| + else |
| + AC_MSG_RESULT([no]) |
| + fi |
| + |
| + if test x"$done" = xno; then |
| + AC_MSG_CHECKING([whether -lpthread saves the day]) |
| + LIBS="-lpthread $LIBS" |
| + AC_TRY_LINK([#include <pthread.h>], |
| + [pthread_t th; pthread_join(th, 0); |
| + pthread_attr_init(0); pthread_cleanup_push(0, 0); |
| + pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], |
| + [done=yes],[done=no]) |
| + |
| + if test "x$done" = xyes; then |
| + AC_MSG_RESULT([yes]) |
| + PTHREAD_LIBS="$PTHREAD_LIBS -lpthread" |
| + else |
| + AC_MSG_RESULT([no]) |
| + AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries and -nostdlib]) |
| + fi |
| + fi |
| + |
| + CFLAGS="$save_CFLAGS" |
| + LIBS="$save_LIBS" |
| + CC="$save_CC" |
| CFLAGS="$save_CFLAGS" |
| LIBS="$save_LIBS" |
| CC="$save_CC" |
| -- |
| 1.7.8.6 |
| |