Я пытаюсь включить клиент NATS C как зависимость от моего проекта. Я предпочитаю связывать статически, поскольку мой проект довольно мал и работает как отдельная служба, поэтому доставка одного исполняемого файла более удобна.
ExternalProject_Add
кажется наиболее перспективным из-за его совместимости с множеством систем сборки. Но я получаю ошибки ссылок при построении с таким подходом:
3rd_party/nats/build/src/libnats_static.a(mutex.c.o): In function `natsMutex_Create':
mutex.c:(.text+0x36): undefined reference to `pthread_mutexattr_init'
mutex.c:(.text+0x4b): undefined reference to `pthread_mutexattr_settype'
mutex.c:(.text+0xc0): undefined reference to `pthread_mutexattr_destroy'
mutex.c:(.text+0x19d): undefined reference to `pthread_mutexattr_destroy'
3rd_party/nats/build/src/libnats_static.a(mutex.c.o): In function `natsMutex_TryLock':
mutex.c:(.text+0x1b5): undefined reference to `pthread_mutex_trylock'
...
Странная часть - когда я изменил метод ссылки с stati c на общий, сборка прошла успешно и программа работает, как ожидалось. Соответствующие коды включены в CMakeLists.txt
.
Исходный код, который вызывает указанную выше ошибку, можно получить с помощью git clone https://github.com/onichandame/nats-epics.git --branch question --depth 1
Среда разработки - CentOS 8. Я сделал docker изображение для этой среды onichandame/docker-dev