Мой код
#include "iostream"
#include "Utilities.cpp"
#include "boost/asio.hpp"
int main()
{
return 0;
}
Пытаюсь его собрать через cmake
cmake_minimum_required(VERSION 3.1)
project(ProcessesManipulate)
set(CMAKE_CXX_STANDARD 20)
add_executable(ProcessesManipulate main.cpp)
Получаю ошибку
/usr/bin/ld: CMakeFiles/ProcessesManipulate.dir/main.cpp.o: in function `boost::asio::detail::posix_thread::~posix_thread()':
main.cpp:(.text._ZN5boost4asio6detail12posix_threadD2Ev[_ZN5boost4asio6detail12posix_threadD2Ev]+0x26): undefined reference to `pthread_detach'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Судя из ошибки, видно что линкер в бустовых библиотеках не может найти ссылку на pthread_detach. Почему так происходит? Я в коде подключаю заголовочный файл
#include "boost/asio.hpp"
И получаю ошибку что где то там что то валится по не понятным причинам. Погуглив, я нашел пару вариантов. Добавив вот такой хак
find_package(Threads REQUIRED)
target_link_libraries(ProcessesManipulate PRIVATE Threads::Threads)
Все фиксится.
Почему я должен знать что #include "boost/asio.hpp" внутри юзает pthread_detach. Когда я делаю #include "boost/asio.hpp" оно разве автоматом не должно мне подгрузить все зависимости?