- Q: Boost.Asio - что нужно указать в cmake среди компонентов при поиске библиотеки boost?
A: только библиотеку system:
find_package(Boost REQUIRED COMPONENTS system)
- Q: Boost.Thread и кроскомпиляция - что делать, если получаем ошибку вида:
undefined reference to 'boost::tss_cleanup_implemented()'
?
A: для начала чуток обратно: в случае Linux, в качестве компонента при поиске библиотеки нужно указывать thread
, а в случае windows (и кроскомпиляции): thread_win32
, т.е. необходимо писать что-то вроде такого кода:
set(BOOST_COMPONENTS
program_options
system)
# Boost thread library is different on Win/Linux
if(WIN32)
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} thread_win32)
else()
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} thread)
endif()
...
find_package(Boost COMPONENTS ${BOOST_COMPONENTS} REQUIRED)
Подсказку увидел тут:
https://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/msg00063.html. Так же следует добавить следующее (при статической линковке):
add_definitions(-DBOOST_THREAD_USE_LIB=1)
Далее, собственно, относительно самого вопроса, предлагают в случае появления такой ошибки при компиляции, поместить в любой свой исходник следующее:
namespace boost {
void tss_cleanup_implemented() { }
}
чистой воды хак :) Дополнительно написано тут:
https://solarcore.blogspot.com/2010/10/boost-c-threads-mingw-mac-os-x.html