Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / волшебные boost.fibers, make, ninja / 11 сообщений из 11, страница 1 из 1
18.03.2016, 21:28
    #39195825
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
волшебные boost.fibers, make, ninja
доброго времени :)
у меня тут один непонятный впрос есть. ситуация такая: есть проект на 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
18.03.2016, 22:11
    #39195832
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
волшебные boost.fibers, make, ninja
alexy_black,

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

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

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

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

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

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

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


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

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

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


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


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