Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Не собирается cpp версия на debian sid #18

Closed
Arkasha18 opened this issue May 8, 2012 · 14 comments
Closed

Не собирается cpp версия на debian sid #18

Arkasha18 opened this issue May 8, 2012 · 14 comments

Comments

@Arkasha18
Copy link

Пробовал родным GCC
gcc version 4.6.3
и устанавливал по вашей инструкции

Configured with: ./configure --prefix=/opt/gcc --with-mpc=/usr/local --with-gmp=/usr/local --with-mpfr=/usr/local --enable-languages=c,c++ --without-ppl --without-cloog
Thread model: posix
gcc version 4.6.3 (GCC)

Выдается ошибка

root@Debian-60-squeeze-64-minimal:/123/dklab_realplexor/trunk/cpp/src# ./Make.sh
In file included from dklab_realplexor.cpp:80:0:
Realplexor/Tools.h: In static member function ‘static Realplexor::cursor_t Realplexor::Tools::time_hi_res()’:
Realplexor/Tools.h:14:33: error: too few arguments to function ‘ev::tstamp ev::now(ev_loop*)’
compilation terminated due to -Wfatal-errors.
root@Debian-60-squeeze-64-minimal:
/123/dklab_realplexor/trunk/cpp/src#

помогите собрать, очень нужно.
Спасибо

@Arkasha18
Copy link
Author

вроде как поняли что libev не той версии, у меня 4.0.0 стоит

@Arkasha18
Copy link
Author

после понижения до 3.7 вроде продвинулись дальше
теперь ругается gcc на то что не знает параметры -lboost_filesystem -lboost_system

@Arkasha18
Copy link
Author

теперь выдаются ошибки

/tmp/ccocin5n.o: In function ev_default_loop': /usr/include/ev.h:460: undefined reference toev_default_loop_init'
/tmp/ccocin5n.o: In function Realplexor::Event::mainloop()': /root/123/dklab_realplexor/trunk/cpp/src/Realplexor/Event/Server.h:213: undefined reference toev_loop'
collect2: ld returned 1 exit status

@Arkasha18
Copy link
Author

после полного понижения в системе libev скомпилировалось все, закрыть можно тему

@rukhem
Copy link

rukhem commented Aug 9, 2012

А не подскаже какие версии gmp, mpc, mprf, boost, ev использовали ?
4_й день пытаюсь собрать все никак...
заранее спасибо

@dimikot
Copy link
Owner

dimikot commented Aug 9, 2012

Последние версии из исходников - см. комментарии в https://github.com/DmitryKoterov/dklab_realplexor/blob/master/cpp/src/Make.sh

Вот насчет libev - выше писали, что, похоже, в новой версии какой-то конфликт при сборке (интересно было бы, кстати, узнать, какой именно и как его обойти; наверняка же какая-то мелочь).

Вообще, сборка - дело непростое, т.к. используется новый C++0x. GCC с ним еще не во всех дистрибутивах обновился, во многих - старые версии (причем они 5-летней давности, так что даже нельзя и сказать, что "слишком уж новый GCC требует реалплексор"), вот и результат...

@dimikot
Copy link
Owner

dimikot commented Aug 9, 2012

Было бы, кстати, отлично, если кто-нибудь с ev 4.x прислал сюда патч. Скорее всего, там просто пара функций переименовалась, из-за этого и не собиралось. Выдержка из документации по апгрейду с 3.x до 4.x:

A number of functions and symbols have been renamed:

ev_loop => ev_run
EVLOOP_NONBLOCK => EVRUN_NOWAIT
EVLOOP_ONESHOT => EVRUN_ONCE

ev_unloop => ev_break
EVUNLOOP_CANCEL => EVBREAK_CANCEL
EVUNLOOP_ONE => EVBREAK_ONE
EVUNLOOP_ALL => EVBREAK_ALL

EV_TIMEOUT => EV_TIMER

ev_loop_count => ev_iteration
ev_loop_depth => ev_depth
ev_loop_verify => ev_verify

Most functions working on C objects don't have an
C<ev_loop_> prefix, so it was removed; C<ev_loop>, C<ev_unloop> and
associated constants have been renamed to not collide with the C anymore and C<EV_TIMER> now follows the same naming scheme
as all other watcher types. Note that C<ev_loop_fork> is still called
C<ev_loop_fork> because it would otherwise clash with the C<ev_fork>
typedef.

@dimikot dimikot reopened this Aug 9, 2012
@rukhem
Copy link

rukhem commented Aug 10, 2012

./bjam -a architecture=x86 instruction-set=i686 toolset=gcc cxxflags=-std=gnu++0x build-type=complete
/root/boost_1_50_0/tools/build/v2/build/feature.jam:320: in validate-feature from module feature
error: unknown feature ""
...

наверное надо так :
./bjam -j8 -a architecture=x86 --instruction-set=i686 --toolset=gcc --cxxflags=-std=gnu++0x --build-type=complete --layout=tagged stage

@rukhem
Copy link

rukhem commented Aug 10, 2012

./Make.sh
In file included from dklab_realplexor.cpp:80:0:
Realplexor/Tools.h: In static member function ‘static Realplexor::cursor_t Realplexor::Tools::time_hi_res()’:
Realplexor/Tools.h:14:33: error: too few arguments to function ‘ev::tstamp ev::now(ev_loop*)’
compilation terminated due to -Wfatal-erro

пытаюсь найти откуда берется ev_loop чтоб заменить на ev_run и никак :)

egrep -R ev_loop ./*
./Realplexor/Event/Server.h.orig: ev_loop(EV_DEFAULT_ 0);
тут поменял

void mainloop()
{
ev_run(EV_DEFAULT_ 0);

@rukhem
Copy link

rukhem commented Aug 10, 2012

поставил libev-3.7

./Make.sh
/usr/bin/ld: cannot find -lcrypt
collect2: ld returned 1 exit status

ldconfig -p | grep crypt
libk5crypto.so.3 (libc6,x86-64) => /lib64/libk5crypto.so.3
libgcrypt.so.11 (libc6,x86-64) => /lib64/libgcrypt.so.11
libcrypto.so.10 (libc6,x86-64) => /usr/lib64/libcrypto.so.10
libcrypt.so.1 (libc6,x86-64, OS ABI: Linux 2.6.18) => /lib64/libcrypt.so.1
libcrypt.so.1 (libc6, OS ABI: Linux 2.6.18) => /lib/libcrypt.so.1
libcrypt.so (libc6,x86-64, OS ABI: Linux 2.6.18) => /usr/lib64/libcrypt.so
libcrypt.so (libc6, OS ABI: Linux 2.6.18) => /usr/lib/libcrypt.so

ваще ничего не понятно

@rukhem
Copy link

rukhem commented Aug 10, 2012

скачать скомпилил libgcrypt-1.5.0

ldconfig -p | grep libgcrypt
libgcrypt.so.11 (libc6,x86-64) => /usr/local/lib/libgcrypt.so.11
libgcrypt.so.11 (libc6,x86-64) => /lib64/libgcrypt.so.11
libgcrypt.so (libc6,x86-64) => /usr/local/lib/libgcrypt.so

./Make.sh
/usr/bin/ld: cannot find -lcrypt
collect2: ld returned 1 exit status

@rukhem
Copy link

rukhem commented Aug 10, 2012

яж говорю шаманство
./Make.sh :

#GCC="g++ -std=gnu++0x -static"
GCC="g++ -std=gnu++0x"

и собралось

тоесть не собиралось статически...
пройду всю процедуру заново и отпишусь :)

@ZooKeeper
Copy link

Откатываться к старой версии не очень дальновидно, особенно что пакеты старые найти все сложнее.

По указанной выше ошибке - она решается через так - ev::now(EV_DEFAULT);
Из документации

Libev can be compiled with a variety of options, the most fundamental of which is EV_MULTIPLICITY. This option determines whether (most) functions and callbacks have an initial struct ev_loop * argument.

То есть функциям нужен контекст лупа в котором выполняться.

Дальше появляется уже менее очевидная ошибка
Storage/CleanupTimers.h: In member function 'void Storage::CleanupTimers::start_timer_for_id(Realplexor::ident_t, int, Cb)':
Storage/CleanupTimers.h:31:26: error: capture of non-variable 'Storage::CleanupTimers::storage'

Скорее всего проблема в доступности переменных
gcc version 4.7.2

@dimikot
Copy link
Owner

dimikot commented Jan 14, 2014

В общем, я причесал немного код (например, избавился от табуляции), переложил по папкам и т.д. Добавил инструкции по сборке в https://github.com/DmitryKoterov/dklab_realplexor/blob/master/cpp/README.txt

В Ubuntu 12.04 (и, я думаю, в любом Debian) совсем простая сборка получилась, в 2 команды.

@dimikot dimikot closed this as completed Jan 14, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants