Package: gtest
Version: 1.6.0-2
Severity: wishlist
User: debian-...@lists.debian.org
Usertags: ld-as-needed

gtests examples don't build with with ld --as-needed.
This is caused by wrong placement of libraries on the commandline.
Shared libraries must be placed behind the objects needing their symbols
when building with --as-needed.
cp -r /usr/share/doc/libgtest-dev/examples/ /tmp
cd /tmp/examples/make
make
...
g++ -I/usr/src/gtest/include -g -Wall -Wextra -lpthread sample1.o 
sample1_unittest.o gtest_main.a -o sample1_unittest
gtest_main.a(gtest-all.o): In function `~ThreadLocal':
/usr/include/gtest/internal/gtest-port.h:1336: undefined reference to 
`pthread_getspecific'
/usr/include/gtest/internal/gtest-port.h:1340: undefined reference to 
`pthread_key_delete'
/usr/include/gtest/internal/gtest-port.h:1336: undefined reference to 
`pthread_getspecific'
/usr/include/gtest/internal/gtest-port.h:1340: undefined reference to 
`pthread_key_delete'
gtest_main.a(gtest-all.o): In function 
`testing::internal::ThreadLocal<std::vector<testing::internal::TraceInfo, 
std::allocator<testing::internal::TraceInfo> > >::GetOrCreateValue() const':
/usr/include/gtest/internal/gtest-port.h:1372: undefined reference to 
`pthread_getspecific'
/usr/include/gtest/internal/gtest-port.h:1379: undefined reference to 
`pthread_setspecific'
gtest_main.a(gtest-all.o): In function 
`testing::internal::ThreadLocal<testing::TestPartResultReporterInterface*>::CreateKey()':
/usr/include/gtest/internal/gtest-port.h:1365: undefined reference to 
`pthread_key_create'
gtest_main.a(gtest-all.o): In function 
`testing::internal::ThreadLocal<std::vector<testing::internal::TraceInfo, 
std::allocator<testing::internal::TraceInfo> > >::CreateKey()':
/usr/include/gtest/internal/gtest-port.h:1365: undefined reference to 
`pthread_key_create'
gtest_main.a(gtest-all.o): In function 
`testing::internal::ThreadLocal<testing::TestPartResultReporterInterface*>::GetOrCreateValue()
 const':
/usr/include/gtest/internal/gtest-port.h:1372: undefined reference to 
`pthread_getspecific'
/usr/include/gtest/internal/gtest-port.h:1379: undefined reference to 
`pthread_setspecific'
collect2: ld returned 1 exit status

In line 80 of that makefile lpthread must be placed at the end of the line or 
-pthread should be used.

see also:
https://bugs.launchpad.net/ubuntu/+source/gtest/+bug/985837
Description: fix build with ld --as-needed
 libraries must be behind objects (including static libraries)
Author: Julian Taylor <jtay...@ubuntu.com>

--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -8,9 +8,9 @@
 	-DEXAMPLESDIR=\"$(top_srcdir)/tests/files\"
 
 LDADD =	\
+	$(PLANNER_LIBS) \
 	$(top_builddir)/src/libplannerapp.la \
-	$(top_builddir)/libplanner/libplanner-1.la \
-	$(PLANNER_LIBS)
+	$(top_builddir)/libplanner/libplanner-1.la
 
 check_LTLIBRARIES = libselfcheck.la
 
@@ -21,19 +21,19 @@
 check_PROGRAMS = $(TESTS)
 
 scheduler_test_SOURCES = scheduler-test.c
-scheduler_test_LDADD = $(LDADD) libselfcheck.la
+scheduler_test_LDADD = libselfcheck.la $(LDADD)
 
 time_test_SOURCES = time-test.c
-time_test_LDADD = $(LDADD) libselfcheck.la
+time_test_LDADD = libselfcheck.la $(LDADD)
 
 calendar_test_SOURCES = calendar-test.c
-calendar_test_LDADD = $(LDADD) libselfcheck.la
+calendar_test_LDADD = libselfcheck.la $(LDADD)
 
 task_test_SOURCES = task-test.c
-task_test_LDADD = $(LDADD) libselfcheck.la
+task_test_LDADD = libselfcheck.la $(LDADD)
 
 cmd_manager_test_SOURCES = cmd-manager-test.c
-cmd_manager_test_LDADD = $(LDADD) libselfcheck.la
+cmd_manager_test_LDADD = libselfcheck.la $(LDADD)
 
 TESTS_ENVIRONMENT = \
 	PLANNER_STORAGEMODULEDIR=$(top_builddir)/libplanner/.libs \

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to