- 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