powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / волшебные boost.fibers, make, ninja
11 сообщений из 11, страница 1 из 1
волшебные boost.fibers, make, ninja
    #39195825
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
доброго времени :)
у меня тут один непонятный впрос есть. ситуация такая: есть проект на 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 - то плохо.

в чем может быть загвоздка?

ЗЫ: это все на дебьян сид
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39195832
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_black,

alexy_blackSiemarglЕще у буста есть отличное "достоинство" - ошибки в шаблонах на пару страниц теста ошибки =)
да, есть такая фишка.. но если принаровитя, то ничего - там они всегда в одном и том же месте :) то есть они вываливаются по определенному шаблону тоже, нужно просто найти это самое место :)
Самое время начать тренироваться принаравливаться ;-)

По теме, смотри внимательнее, какие либы линкуются, список разный выходит. Например, в ninja нет libcpphttpx_h2o.a
А заодно, глянь где определён символ boost::context::detail::activation_record::current_rec
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39195853
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, то я говорил про шаблоны, а это линковка :)
хм, не заметил про libcpphttpx_h2o.a спасибо..

а как так - это сгенерировано из одного файла cmake??
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39195916
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начал проверять, составил список библиотек - 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.
 ninja 
	-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
	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 
	-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 


обнаружил что boost_system подключается два раза - первый раз как so второй как статическая... убрал из команды динамическую результат тот же


проверил символы, которые он указал - их нет в libboost_context и нет в libboost_fibers :( но ведь как-то же это компилится у make!
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39195922
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_black,

видимо это баги или особенности в CMake бэкенде для ninja.

чем оно вообще лучше make?
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39195925
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivalexy_black,

видимо это баги или особенности в CMake бэкенде для ninja. багрепорт в смысле отправить? я хочу сначала удовтоверится, что это не я накосячил в сценарии где-нибудь..

MasterZivчем оно вообще лучше make?
на порядок быстрее. у меня в проекте куча библиотек, куча тестов: один тест - это один исполняемый файл, как правило к нему один или два исходника. сейчас проект полностью собран и когда я захожу в директорию с make набираю там make и нажимаю enter - то через две секунды вылезает первая строка, через десять секунд мне весело сообщают что все готово (я просто считал секунды). а у ninja не проходит и секунды, как она мне сообщает, что ничего недалть не нужно (до того, как этот баг открылся).
но у make мне нравится цветной вывод :) да и если нужно компилить весь проект, то наверное разницы нет, потому что если компилить нужно минут, скажем, минут 5-10, то +- 10 секунд роли не играют.
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39195946
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackна порядок быстрее. у меня в проекте куча библиотек, куча тестов: один тест - это один исполняемый файл, как правило к нему один или два исходника. сейчас проект полностью собран и когда я захожу в директорию с make набираю там make и нажимаю enter - то через две секунды вылезает первая строка, через десять секунд мне весело сообщают что все готово (я просто считал секунды). а у ninja не проходит и секунды, как она мне сообщает, что ничего недалть не нужно (до того, как этот баг открылся).
но у make мне нравится цветной вывод :) да и если нужно компилить весь проект, то наверное разницы нет, потому что если компилить нужно минут, скажем, минут 5-10, то +- 10 секунд роли не играют.
Трудно сказать что там может такого подвисать.
Во-первых, это не у make цветной вывод, это CMake генерит такой Makefile. Makefile, сгенеренный, скажем, qmake'ом не цветной.
Во-вторых, если хочешь ускорить сборку, добавь к команде make ещё и количество джобов по количеству ядер CPU. 'make -j8' например.
В-третиьх, можно сделать make более говорливым через verbosity, чтобы посмотреть на чём конкретно он подтормаживает.
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39195956
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

кстати, по невнимательности допустил ошибку - перелинкова разные файлы.. но до того как опубликовать здесь, проводил такой тест, там удалял нужные файлы :) сейчас тоже удалил нужный файл (после отката на нерабочюю версию) и проверил результат - отличий нет.
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39196183
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackMasterZivчем оно вообще лучше make?
на порядок быстрее. у меня в проекте куча библиотек, куча тестов:


Конкретно, сколько ? собитаемых модулей (.exe .lib) и исходных?
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39196570
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

на вскидку начитал 25 целей сборки (то есть для которых cmake нужно найти зависимости и т.д.)

find -iname '*.cpp' | wc -l
115


может cmake может сама сосчитать по какой-нибудь команде?
...
Рейтинг: 0 / 0
волшебные boost.fibers, make, ninja
    #39196576
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, ну на полностью собранной
make | wc -l
23
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / волшебные boost.fibers, make, ninja
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]