Hatred's Log Place

DON'T PANIC!

Dec 13, 2011 - 1 minute read - Comments - programming c++

Boost, CMake, кросскомпиляция

  • Q: Boost.Asio - что нужно указать в cmake среди компонентов при поиске библиотеки boost?

    A: только библиотеку system:cmakefind_package(Boost REQUIRED COMPONENTS system)

  • Q: Boost.Thread и кроскомпиляция - что делать, если получаем ошибку вида: **undefined reference toboost::tss_cleanup_implemented()'**?<br/><br/> **A:** для начала чуток обратно: в случае Linux, в качестве компонента при поиске библиотеки нужно указыватьthread, а в случае windows (и кроскомпиляции):thread_win32, т.е. необходимо писать что-то вроде такого кода:``cmake 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) Подсказку увидел тут: [http://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/msg00063.html](http://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/msg00063.html). Так же следует добавить следующее (при статической линковке):cmakeadd_definitions(-DBOOST_THREAD_USE_LIB=1) . Далее, собственно, относительно самого вопроса, предлагают в случае появления такой ошибки при компиляции, поместить в любой свой исходник следующее:cpp namespace boost { void tss_cleanup_implemented() { } } ``` чистой воды хак :) Дополнительно написано тут: http://solarcore.blogspot.com/2010/10/boost-c-threads-mingw-mac-os-x.html