bloomberg / bde

Basic Development Environment - a set of foundational C++ libraries used at Bloomberg.
Apache License 2.0
1.67k stars 316 forks source link

Missing -lpthread when linking with cmake_build.py #260

Closed seanbaxter closed 4 years ago

seanbaxter commented 4 years ago

Most everything seems to compile and link, except tests relying on pthreads. bsls_splinlock.t is the first test to break the build.

The link.txt shows this: /usr/bin/circle -O2 -DNDEBUG CMakeFiles/bsls_spinlock.t.dir/groups/bsl/bsls/bsls_spinlock.t.cpp.o -o bsls_spinlock.t libbsls.

The terminal output complains about no pthread:

Scanning dependencies of target bsls_spinlock.t [ 23%] Building CXX object CMakeFiles/bsls_spinlock.t.dir/groups/bsl/bsls/bsls_spinlock.t.cpp.o [ 23%] Linking CXX executable bsls_spinlock.t CMakeFiles/bsls_spinlock.t.dir/groups/bsl/bsls/bsls_spinlock.t.cpp.o: In function createThread(void* (*)(void*), void*)': bsls_spinlock.t.cpp:(.text+0x7f): undefined reference topthread_create' CMakeFiles/bsls_spinlock.t.dir/groups/bsl/bsls/bsls_spinlock.t.cpp.o: In function joinThread(unsigned long)': bsls_spinlock.t.cpp:(.text+0xb3): undefined reference topthread_join' error: linker failed with exit code 1

CMakeFiles/bsls_spinlock.t.dir/build.make:104: recipe for target 'bsls_spinlock.t' failed make[3]: [bsls_spinlock.t] Error 1 CMakeFiles/Makefile2:6345: recipe for target 'CMakeFiles/bsls_spinlock.t.dir/all' failed make[2]: [CMakeFiles/bsls_spinlock.t.dir/all] Error 2 CMakeFiles/Makefile2:5637: recipe for target 'CMakeFiles/all.t.dir/rule' failed make[1]: *** [CMakeFiles/all.t.dir/rule] Error 2

I pasted the bsls_spinlock.t.dir/build.make here: https://gist.github.com/seanbaxter/3b73ebee7cb034c97d905675767d7a6d

The only thing I can find relevant to pthread is in {build-dir}/bsl.py where Cflags: -I${includedir} -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT Libs: -L${libdir} -lbsl -lpthread -lrt

but these options do not get incorporated by configure into the build files created for my compiler.

What do I need to do to get -lpthread to be included?

osubboo commented 4 years ago

You need to add an entry for your compiler (similar to these): https://github.com/bloomberg/bde-tools/blob/master/cmake/bde_ufid.cmake#L629-L631

Then rerun configure with --clean ( to force compiler detection step).

Another location where you might want to extend the compiler entries are here: https://github.com/bloomberg/bde-tools/blob/master/cmake/bde_ufid.cmake#L573-L587