Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
доброго времени :) у меня тут один непонятный впрос есть. ситуация такая: есть проект на cmake. есть буст 1.61 с boost.fibers, которые используют boost.context (то есть контекст должен идти после фибры) и нормально у меня компилится. так вот, если сделать с генератором на make, то все собирается, если сделать на ninja - то не выходит, хотя команда одна и та же. вот листинг ошибок ninja [3/6] Linking CXX executable tests/cms/itest_2 FAILED: : && /usr/bin/c++ -Wsuggest-override -g -DBUILD_DEBUG tests/cms/CMakeFiles/itest_2.dir/itests/2/blog.cpp.o -o tests/cms/itest_2 -rdynamic libcpphttpx_sockjs.a libcpphttpx_cms.a tests/libcpphttpx_test_start.a /usr/local/lib/libboost_locale.so /usr/local/lib/libboost_system.so /usr/local/lib/cppjson-1.1/Debug/libcppjson.a -ldl -lstdc++fs li bcpphttpx_h2o.a libcpphttpx.a /usr/local/lib/libboost_fiber.a /usr/local/lib/libboost_context.a /usr/local/lib/libboost_system.a /usr/local/lib/libboost_thread.a -lpthread /usr/ local/lib/libh2o.a /usr/local/lib/libwslay.so /usr/local/lib/libuv.so -lssl -lcrypto -lpthread /usr/local/lib/libboost_program_options.so -Wl,-rpath,/usr/local/lib && : libcpphttpx.a(fiber_starter.cpp.o): In function `boost::fibers::context::context<boost::context::basic_fixedsize_stack<boost::context::stack_traits>, cpphttpx::fiber_starter::start(std::function<void ()> const&)::{lambda()#1}, std::tuple<> >(boost::fibers::worker_context_t, boost::context::preallocated, boost::context::basic_fixedsize_stack<boost::context::stack_traits>, cpphttpx::fiber_starter::start(std::function<void ()> const&)::{lambda()#1}&&, std::tuple<>&&)': /usr/local/include/boost/fiber/context.hpp:321: undefined reference to `boost::context::execution_context::current()' libcpphttpx.a(fiber_starter.cpp.o): In function `void boost::fibers::context::run_<cpphttpx::fiber_starter::start(std::function<void ()> const&)::{lambda()#1}, std::tuple<> >(cpphttpx::fiber_starter::start(std::function<void ()> const&)::{lambda()#1}&&, std::tuple<>&&, boost::fibers::context::data_t*)': /usr/local/include/boost/fiber/context.hpp:206: undefined reference to `boost::fibers::context::terminate()' libcpphttpx.a(fiber_starter.cpp.o): In function `boost::context::detail::activation_record* boost::context::execution_context::create_context<boost::context::basic_fixedsize_sta ck<boost::context::stack_traits>, boost::fibers::context::context<boost::context::basic_fixedsize_stack<boost::context::stack_traits>, cpphttpx::fiber_starter::start(std::function<void ()> const&)::{lambda()#1}, std::tuple<> >(boost::fibers::worker_context_t, boost::context::preallocated, boost::context::basic_fixedsize_stack<boost::context::stack_trai ts>, cpphttpx::fiber_starter::start(std::function<void ()> const&)::{lambda()#1}&&, std::tuple<>&&)::{lambda(void*)#1}>(boost::fibers::worker_context_t, boost::context::prealloc ated, boost::fibers::context::context<boost::context::basic_fixedsize_stack<boost::context::stack_traits>, cpphttpx::fiber_starter::start(std::function<void ()> const&)::{lambda()#1}, std::tuple<> >(boost::fibers::worker_context_t, boost::context::preallocated, boost::context::basic_fixedsize_stack<boost::context::stack_traits>, cpphttpx::fiber_starter::start(std::function<void ()> const&)::{lambda()#1}&&, std::tuple<>&&)::{lambda(void*)#1})': /usr/local/include/boost/context/execution_context.hpp:294: undefined reference to `boost::context::execution_context::current()' libcpphttpx.a(fiber_starter.cpp.o): In function `TLS wrapper function for boost::context::detail::activation_record::current_rec': fiber_starter.cpp:(.text._ZTWN5boost7context6detail17activation_record11current_recE[_ZTWN5boost7context6detail17activation_record11current_recE]+0x5): undefined reference to `TLS init function for boost::context::detail::activation_record::current_rec' fiber_starter.cpp:(.text._ZTWN5boost7context6detail17activation_record11current_recE[_ZTWN5boost7context6detail17activation_record11current_recE]+0x15): undefined reference to ` boost::context::detail::activation_record::current_rec' collect2: error: ld returned 1 exit status verbose make [ 89%] Linking CXX executable itest_1 cd /home/fleonis/projects/tmp/cpphttpx_srv/build/tests/cms && /usr/bin/cmake -E cmake_link_script CMakeFiles/itest_1.dir/link.txt --verbose=1 /usr/bin/g++ -Wsuggest-override -g -DBUILD_DEBUG CMakeFiles/itest_1.dir/itests/1/itest.cpp.o -o itest_1 -rdynamic ../../libcpphttpx_sockjs.a ../../libcpphttpx_cms.a ../libcpphttpx_test_start.a /usr/local/lib/libboost_locale.so /usr/local/lib/libboost_system.so /usr/local/lib/cppjson-1.1/Debug/libcppjson.a -ldl -lstdc++fs ../../libcpphttpx_h2o.a ../../libcpphttpx.a /usr/local/lib/libboost_fiber.a /usr/local/lib/libboost_context.a /usr/local/lib/libboost_system.a /usr/local/lib/libboost_thread.a -lpthread /usr/local/lib/libh2o.a /usr/local/lib/libwslay.so /usr/local/lib/libuv.so -lssl -lcrypto -lpthread /usr/local/lib/libboost_program_options.so -Wl,-rpath,/usr/local/lib при чем, если исполнить комманды независимо, в директории с make, то все хорошо, а если в ninja - то плохо. в чем может быть загвоздка? ЗЫ: это все на дебьян сид ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 21:28 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
alexy_black, alexy_blackSiemarglЕще у буста есть отличное "достоинство" - ошибки в шаблонах на пару страниц теста ошибки =) да, есть такая фишка.. но если принаровитя, то ничего - там они всегда в одном и том же месте :) то есть они вываливаются по определенному шаблону тоже, нужно просто найти это самое место :) Самое время начать тренироваться принаравливаться ;-) По теме, смотри внимательнее, какие либы линкуются, список разный выходит. Например, в ninja нет libcpphttpx_h2o.a А заодно, глянь где определён символ boost::context::detail::activation_record::current_rec ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 22:11 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
ну, то я говорил про шаблоны, а это линковка :) хм, не заметил про libcpphttpx_h2o.a спасибо.. а как так - это сгенерировано из одного файла cmake?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2016, 23:26 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
начал проверять, составил список библиотек - cpphttpx_h2o есть и у make и у ninja вот списки (некоторые библиотеки в одной сторчке - это зависимости) list Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. обнаружил что boost_system подключается два раза - первый раз как so второй как статическая... убрал из команды динамическую результат тот же проверил символы, которые он указал - их нет в libboost_context и нет в libboost_fibers :( но ведь как-то же это компилится у make! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 09:11 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
alexy_black, видимо это баги или особенности в CMake бэкенде для ninja. чем оно вообще лучше make? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 09:22 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
MasterZivalexy_black, видимо это баги или особенности в CMake бэкенде для ninja. багрепорт в смысле отправить? я хочу сначала удовтоверится, что это не я накосячил в сценарии где-нибудь.. MasterZivчем оно вообще лучше make? на порядок быстрее. у меня в проекте куча библиотек, куча тестов: один тест - это один исполняемый файл, как правило к нему один или два исходника. сейчас проект полностью собран и когда я захожу в директорию с make набираю там make и нажимаю enter - то через две секунды вылезает первая строка, через десять секунд мне весело сообщают что все готово (я просто считал секунды). а у ninja не проходит и секунды, как она мне сообщает, что ничего недалть не нужно (до того, как этот баг открылся). но у make мне нравится цветной вывод :) да и если нужно компилить весь проект, то наверное разницы нет, потому что если компилить нужно минут, скажем, минут 5-10, то +- 10 секунд роли не играют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 09:37 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
alexy_blackна порядок быстрее. у меня в проекте куча библиотек, куча тестов: один тест - это один исполняемый файл, как правило к нему один или два исходника. сейчас проект полностью собран и когда я захожу в директорию с make набираю там make и нажимаю enter - то через две секунды вылезает первая строка, через десять секунд мне весело сообщают что все готово (я просто считал секунды). а у ninja не проходит и секунды, как она мне сообщает, что ничего недалть не нужно (до того, как этот баг открылся). но у make мне нравится цветной вывод :) да и если нужно компилить весь проект, то наверное разницы нет, потому что если компилить нужно минут, скажем, минут 5-10, то +- 10 секунд роли не играют. Трудно сказать что там может такого подвисать. Во-первых, это не у make цветной вывод, это CMake генерит такой Makefile. Makefile, сгенеренный, скажем, qmake'ом не цветной. Во-вторых, если хочешь ускорить сборку, добавь к команде make ещё и количество джобов по количеству ядер CPU. 'make -j8' например. В-третиьх, можно сделать make более говорливым через verbosity, чтобы посмотреть на чём конкретно он подтормаживает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 11:20 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
NekZТрудно сказать что там может такого подвисать. Во-первых, это не у make цветной вывод, это CMake генерит такой Makefile. Makefile, сгенеренный, скажем, qmake'ом не цветной. да, я знаю, что это cmake, просто для ninja такого нет :) когда я делал make файлы сам, там вобще черти какой вывод был.NekZВо-вторых, если хочешь ускорить сборку, добавь к команде make ещё и количество джобов по количеству ядер CPU. 'make -j8' например.я тестировал на полностью собранной системе (т.к. на другой трудно протестировать работу именно make), а почему-то от кол-ва потоков это не сильно зависит. то есть я попробовал и make -j3 и make -j50 разница примерно в секунду (если система собрана, то навеное не обязательно по кол-ву ядер, ведь это не будут очень нагруженные процессы).. ninja -j1 дает такой же результат как и просто ninja (он без параметров сам выбирает нужное кол-во потоков). вобще я почитал сравнения, часто встречается такая инфа. там на самом сайте нинзи это написано (они говорят, что make - это типа c++, а ninja - это типа асцец :) ).NekZВ-третиьх, можно сделать make более говорливым через verbosity, чтобы посмотреть на чём конкретно он подтормаживает. ну, я даже в этой теме делал расширенный вывод, но ничего там нет.. то есть там cd куда-то и там выполняется сценарий с участием cmake и так для каждой директории (то есть для каждого таргета). по теме - убрал boost_system.so из статической линковки (у меня там это стояло как todo в cmakelist), после ninja clean все собралось.. в чем разница я так и не понял, ведь после boost_fiber в параметрах не стояло ни одной моей билиотеки. может быть эти функции выводились или были в заголовнике и прикомпиливались к какой-либо из моих библиотек, так что разница в линковке других библиотек, которые подключаются к itest_2 кстати, по невнимательности допустил ошибку - перелинкова разные файлы.. но до того как опубликовать здесь, проводил такой тест, там удалял нужные файлы :) сейчас тоже удалил нужный файл (после отката на нерабочюю версию) и проверил результат - отличий нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 11:48 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
alexy_blackMasterZivчем оно вообще лучше make? на порядок быстрее. у меня в проекте куча библиотек, куча тестов: Конкретно, сколько ? собитаемых модулей (.exe .lib) и исходных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2016, 20:13 |
|
||
|
волшебные boost.fibers, make, ninja
|
|||
|---|---|---|---|
|
#18+
MasterZiv, на вскидку начитал 25 целей сборки (то есть для которых cmake нужно найти зависимости и т.д.) find -iname '*.cpp' | wc -l 115 может cmake может сама сосчитать по какой-нибудь команде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2016, 20:07 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=37&tid=2018576]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 302ms |
| total: | 460ms |

| 0 / 0 |
