FAILED: subprojects/nats.c/libcm_nats.so
cc -o subprojects/nats.c/libcm_nats.so subprojects/nats.c/libcm_nats.so.p/src_asynccb.c.o subprojects/nats.c/libcm_nats.so.p/src_buf.c.o subprojects/nats.c/libcm_nats.so.p/src_comsock.c.o subprojects/nats.c/libcm_nats.so.p/src_conn.c.o subprojects/nats.c/libcm_nats.so.p/src_crypto.c.o subprojects/nats.c/libcm_nats.so.p/src_hash.c.o subprojects/nats.c/libcm_nats.so.p/src_js.c.o subprojects/nats.c/libcm_nats.so.p/src_jsm.c.o subprojects/nats.c/libcm_nats.so.p/src_kv.c.o subprojects/nats.c/libcm_nats.so.p/src_micro.c.o subprojects/nats.c/libcm_nats.so.p/src_micro_args.c.o subprojects/nats.c/libcm_nats.so.p/src_micro_client.c.o subprojects/nats.c/libcm_nats.so.p/src_micro_endpoint.c.o subprojects/nats.c/libcm_nats.so.p/src_micro_error.c.o subprojects/nats.c/libcm_nats.so.p/src_micro_monitoring.c.o subprojects/nats.c/libcm_nats.so.p/src_micro_request.c.o subprojects/nats.c/libcm_nats.so.p/src_msg.c.o subprojects/nats.c/libcm_nats.so.p/src_nats.c.o subprojects/nats.c/libcm_nats.so.p/src_natstime.c.o subprojects/nats.c/libcm_nats.so.p/src_nkeys.c.o subprojects/nats.c/libcm_nats.so.p/src_nuid.c.o subprojects/nats.c/libcm_nats.so.p/src_opts.c.o subprojects/nats.c/libcm_nats.so.p/src_parser.c.o subprojects/nats.c/libcm_nats.so.p/src_pub.c.o subprojects/nats.c/libcm_nats.so.p/src_srvpool.c.o subprojects/nats.c/libcm_nats.so.p/src_stats.c.o subprojects/nats.c/libcm_nats.so.p/src_status.c.o subprojects/nats.c/libcm_nats.so.p/src_sub.c.o subprojects/nats.c/libcm_nats.so.p/src_timer.c.o subprojects/nats.c/libcm_nats.so.p/src_url.c.o subprojects/nats.c/libcm_nats.so.p/src_util.c.o subprojects/nats.c/libcm_nats.so.p/src_unix_cond.c.o subprojects/nats.c/libcm_nats.so.p/src_unix_mutex.c.o subprojects/nats.c/libcm_nats.so.p/src_unix_sock.c.o subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o subprojects/nats.c/libcm_nats.so.p/src_stan_conn.c.o subprojects/nats.c/libcm_nats.so.p/src_stan_copts.c.o subprojects/nats.c/libcm_nats.so.p/src_stan_msg.c.o subprojects/nats.c/libcm_nats.so.p/src_stan_protocol.pb-c.c.o subprojects/nats.c/libcm_nats.so.p/src_stan_pub.c.o subprojects/nats.c/libcm_nats.so.p/src_stan_sopts.c.o subprojects/nats.c/libcm_nats.so.p/src_stan_sub.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,--start-group -Wl,-soname,libcm_nats.so /usr/lib64/libssl.so /usr/lib64/libcrypto.so -lrt /usr/lib64/libprotobuf-c.so -Wl,--end-group
subprojects/nats.c/libcm_nats.so.p/src_unix_mutex.c.o: In function `natsMutex_Create':
/nats-build-error/build/../subprojects/nats.c/src/unix/mutex.c:27: undefined reference to `pthread_mutexattr_init'
/nats-build-error/build/../subprojects/nats.c/src/unix/mutex.c:34: undefined reference to `pthread_mutexattr_settype'
/nats-build-error/build/../subprojects/nats.c/src/unix/mutex.c:52: undefined reference to `pthread_mutexattr_destroy'
subprojects/nats.c/libcm_nats.so.p/src_unix_mutex.c.o: In function `natsMutex_TryLock':
/nats-build-error/build/../subprojects/nats.c/src/unix/mutex.c:61: undefined reference to `pthread_mutex_trylock'
subprojects/nats.c/libcm_nats.so.p/src_unix_mutex.c.o: In function `natsMutex_Lock':
/nats-build-error/build/../subprojects/nats.c/src/unix/mutex.c:74: undefined reference to `pthread_mutex_trylock'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `nats_InitOnce':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:20: undefined reference to `pthread_once'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `natsThread_Create':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:69: undefined reference to `pthread_create'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `natsThread_Detach':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:112: undefined reference to `pthread_detach'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `natsThread_Join':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:100: undefined reference to `pthread_join'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `natsThreadLocal_CreateKey':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:145: undefined reference to `pthread_key_create'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `natsThreadLocal_SetEx':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:165: undefined reference to `pthread_setspecific'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `natsThread_Join':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:105: undefined reference to `pthread_detach'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `natsThreadLocal_Get':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:157: undefined reference to `pthread_getspecific'
subprojects/nats.c/libcm_nats.so.p/src_unix_thread.c.o: In function `natsThreadLocal_DestroyKey':
/nats-build-error/build/../subprojects/nats.c/src/unix/thread.c:181: undefined reference to `pthread_key_delete'
collect2: error: ld returned 1 exit status
[62/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_parser.c.o
[63/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_status.c.o
[64/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_timer.c.o
[65/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_srvpool.c.o
[66/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_nats.c.o
[67/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_opts.c.o
[68/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_pub.c.o
[69/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_url.c.o
[70/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_js.c.o
[71/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_conn.c.o
[72/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_sub.c.o
[73/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_jsm.c.o
[74/86] Compiling C object subprojects/nats.c/libcm_nats_static.a.p/src_util.c.o
ninja: build stopped: subcommand failed.
Observed behavior
When building the cmake project via meson, the library is linked without pthreads, leading to a build error.
I believe the problem is that NATS_USE_PTHREAD is set only on CMAKE_C_FLAGS, but those flags do not necessarily apply to the link stage.
Expected behavior
It should still build. This diff helps:
But I'm not 100% sure it's correct in general.
Server and client version
nats.c as of fab89f491cc991b046b04811024d46705f08d158
Host environment
centos 8 x86-64 as per the below repo
Steps to reproduce
To reproduce, clone https://github.com/jlevon/nats-build-error and run make (requires docker).