LINUX.ORG.RU

[io][компилятор]Ошибка сборки

 ,


0

1

Сабж, решил поиграться с io ( http://ru.wikipedia.org/wiki/Io ) Не найдя его в ауре (плохо искал?) решил собрать из git ( https://github.com/stevedekorte/io ).

[ 84%] Building C object addons/Socket/CMakeFiles/IoSocket.dir/source/IoEvOutRequest.c.o
/home/userx/io/addons/Socket/source/IoEvOutRequest.c: В функции «IoEvOutRequest_RequestDoneCallback»:
/home/userx/io/addons/Socket/source/IoEvOutRequest.c:110:48: ошибка: доступ по указателю на неполный тип
/home/userx/io/addons/Socket/source/IoEvOutRequest.c:110:48: ошибка: доступ по указателю на неполный тип
make[2]: *** [addons/Socket/CMakeFiles/IoSocket.dir/source/IoEvOutRequest.c.o] Ошибка 1
make[1]: *** [addons/Socket/CMakeFiles/IoSocket.dir/all] Ошибка 2
make: *** [all] Ошибка 2
Помучился, но так и не смог понять где там ошибка. И конечно же, кто виноват и что делать ?

★★★★★

Видимо, какой-то тип declared, но не defined.

типа

struct xxx;
struct xxx *x;
А ниже попытка сделать что-то полезное с x

ratatosk
()

УМВР

...
[ 87%] Building C object addons/Socket/CMakeFiles/IoSocket.dir/source/IoEvOutRequest.c.o
[ 87%] Building C object addons/Socket/CMakeFiles/IoSocket.dir/source/IoEvOutResponse.c.o
[ 87%] Building C object addons/Socket/CMakeFiles/IoSocket.dir/source/IoEvent.c.o
...
[100%] Built target IoZlib
$ git log -1
commit 6a8f90b34b8ecfd8dbd3ab9028f69badbc0062a1
Merge: 5981f8c 8eecfbf
Author: Steve Dekorte <steve@dekorte.com>
Date:   Wed Jun 22 13:55:34 2011 -0700

    Merge pull request #119 from kikito/typos
    
    Typos
arsi ★★★★★
()
Ответ на: УМВР от arsi

O_o WTF?

[ 83%] Built target IoSHA1
[ 84%] Built target IoSQLite3
[ 84%] Building C object addons/Socket/CMakeFiles/IoSocket.dir/source/IoEvOutRequest.c.o
/home/userx/io/addons/Socket/source/IoEvOutRequest.c: В функции «IoEvOutRequest_RequestDoneCallback»:
/home/userx/io/addons/Socket/source/IoEvOutRequest.c:110:48: ошибка: доступ по указателю на неполный тип
/home/userx/io/addons/Socket/source/IoEvOutRequest.c:110:48: ошибка: доступ по указателю на неполный тип
make[2]: *** [addons/Socket/CMakeFiles/IoSocket.dir/source/IoEvOutRequest.c.o] Ошибка 1
make[1]: *** [addons/Socket/CMakeFiles/IoSocket.dir/all] Ошибка 2
make: *** [all] Ошибка 2
~/io/ >>git log -1                                                     12:59 :(
commit 6a8f90b34b8ecfd8dbd3ab9028f69badbc0062a1
Merge: 5981f8c 8eecfbf
Author: Steve Dekorte <steve@dekorte.com>
Date:   Wed Jun 22 13:55:34 2011 -0700

    Merge pull request #119 from kikito/typos
    
    Typos
Позвольте узнать версию ОС,gcc.

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

> Позвольте узнать версию ОС,gcc.

$ cmake --version
cmake version 2.8.4
$ gcc --version
gcc (GCC) 4.5.3
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ uname -a
Linux ***** 2.6.38.7 #3 SMP Sun May 22 16:21:50 CDT 2011 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ AuthenticAMD GNU/Linux
$ cat /etc/slackware-version 
Slackware 13.37.0
$ _
arsi ★★★★★
()
Ответ на: комментарий от joy4eg

Там же на github можно скачать архивную (наверное рабочую) версию исходников. Правда датирована она еще прошлым годом, но вам же просто попробовать.

delete83 ★★
()

Хм... А у вас libevent или что-нибудь похожее имеется в системе?

find / -name 'event.h'
что-нибудь находит?

delete83 ★★
()
Ответ на: комментарий от baverman

Тухлый, но зато собрался, работает. Уже что-то радует.

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от delete83

В ауре была версия 2009, собралось. Далее же, 2010\git, уже не хочет.

Хм... А у вас libevent или что-нибудь похожее имеется в системе?

~/ >>p -Ql libevent                                                    13:24 :)
libevent /usr/
libevent /usr/bin/
libevent /usr/bin/event_rpcgen.py
libevent /usr/include/
libevent /usr/include/evdns.h
libevent /usr/include/event.h
libevent /usr/include/event2/
libevent /usr/include/event2/buffer.h
libevent /usr/include/event2/buffer_compat.h
libevent /usr/include/event2/bufferevent.h
libevent /usr/include/event2/bufferevent_compat.h
libevent /usr/include/event2/bufferevent_ssl.h
libevent /usr/include/event2/bufferevent_struct.h
libevent /usr/include/event2/dns.h
libevent /usr/include/event2/dns_compat.h
libevent /usr/include/event2/dns_struct.h
libevent /usr/include/event2/event-config.h
libevent /usr/include/event2/event.h
libevent /usr/include/event2/event_compat.h
libevent /usr/include/event2/event_struct.h
libevent /usr/include/event2/http.h
libevent /usr/include/event2/http_compat.h
libevent /usr/include/event2/http_struct.h
libevent /usr/include/event2/keyvalq_struct.h
libevent /usr/include/event2/listener.h
libevent /usr/include/event2/rpc.h
libevent /usr/include/event2/rpc_compat.h
libevent /usr/include/event2/rpc_struct.h
libevent /usr/include/event2/tag.h
libevent /usr/include/event2/tag_compat.h
libevent /usr/include/event2/thread.h
libevent /usr/include/event2/util.h
libevent /usr/include/evhttp.h
libevent /usr/include/evrpc.h
libevent /usr/include/evutil.h
libevent /usr/lib/
libevent /usr/lib/libevent-2.0.so.5
libevent /usr/lib/libevent-2.0.so.5.1.1
libevent /usr/lib/libevent.a
libevent /usr/lib/libevent.so
libevent /usr/lib/libevent_core-2.0.so.5
libevent /usr/lib/libevent_core-2.0.so.5.1.1
libevent /usr/lib/libevent_core.a
libevent /usr/lib/libevent_core.so
libevent /usr/lib/libevent_extra-2.0.so.5
libevent /usr/lib/libevent_extra-2.0.so.5.1.1
libevent /usr/lib/libevent_extra.a
libevent /usr/lib/libevent_extra.so
libevent /usr/lib/libevent_openssl-2.0.so.5
libevent /usr/lib/libevent_openssl-2.0.so.5.1.1
libevent /usr/lib/libevent_openssl.a
libevent /usr/lib/libevent_openssl.so
libevent /usr/lib/libevent_pthreads-2.0.so.5
libevent /usr/lib/libevent_pthreads-2.0.so.5.1.1
libevent /usr/lib/libevent_pthreads.a
libevent /usr/lib/libevent_pthreads.so
libevent /usr/lib/pkgconfig/
libevent /usr/lib/pkgconfig/libevent.pc
libevent /usr/lib/pkgconfig/libevent_openssl.pc
libevent /usr/lib/pkgconfig/libevent_pthreads.pc
joy4eg ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

Как вариант, можно попробовать добавить в файл IoEvOutRequest.h строчку

#include <event.h>
, но не уверен, что добавлять надо именно туда.

Почему у arsi собралось, для меня загадка. Есть подозрение, что он собирал не все. Может где-то в ./configure с опциями покопался или как там настраивается сборка проекта.

delete83 ★★
()

Забавно, в Gentoo, в chroot окружении, успешно собралось с первого раза, не выплюнув не одной ошибки. А в арче, не в какую не хочет... Мать его, что ж ему надо то ?

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от delete83

#include <event.h>

Увы, все так же.

Есть подозрение, что он собирал не все. Может где-то в ./configure с опциями покопался или как там настраивается сборка проекта.

Там cmake, всего с одной опцией: -DCMAKE_INSTALL_PREFIX

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

Ох, забыл совсем! Как бы это объяснить то? Вы же знаете, как gentoo пакеты собирает? Знаете про опцию -jn в make.conf? Вот, может у вас в арче комиляция в несколько потоков идет и участок кода, в котором подключается event.h компилится позже, чем проблемный?

delete83 ★★
()
Ответ на: комментарий от delete83

Лог сборки в Gentoo http://dumpz.org/63736/
В арче: http://dumpz.org/63738/
Но уже проясняется что-то, в генте libevent 2.0.10
В арче же 2.0.12-1
Плюс ответили на гитхабе: https://github.com/stevedekorte/io/issues/95
Но еще больше не понятно, почему тогда в генте собралось? О_о

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от delete83

Кол-во потоков нигде не указывалось, везде 1.

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от delete83

> Почему у arsi собралось, для меня загадка.

потому что слака, очевидно же ;)

> Есть подозрение, что он собирал не все. Может где-то в ./configure с опциями покопался или как там настраивается сборка проекта.

там был build.sh. запустил его без аргументов, он мне всё и собрал.

зы: libevent-1.4.13, самосборный. даже не знал, что он у меня есть, собирал давным-давно хз зачем…

arsi ★★★★★
()
Ответ на: комментарий от arsi

Собственно, об это и написано в issue. Этот аддон не совместим с libevent:2 и работает только с libevent:1

Почему собралось в генте, загадка.

delete83 ★★
()
Ответ на: комментарий от arsi

>> зы: libevent-1.4.13, На гит хабе, как решение, предлагается использовать данную версию. Но тогда совсем не понятно, почему же в Gentoo все собралось со второй версией?...

joy4eg ★★★★★
() автор топика

В ауре версия 2009 года, успешно собралась с вторым эвентом, а все поздние нет, что же они там вкурили...

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

Возможно, старая версия не использовала libevent вообще. В gentoo почему собралось... Хрен его знает. В принципе, могут и патчи гентушные какие-нибудь быть в libevent.

delete83 ★★
()

Все, что я сейчас могу сказать: сошлись в одном месте два охрененно написанных проекта. В ридми к libevent написано, что код, написанный под libevent:1 должен компилиться и работать с libevent:2

Здорово! Только не работает.

delete83 ★★
()
Ответ на: комментарий от delete83

Мопед не мой,да. Хорошо что Я только на «поиграться», а если бы серьезные дядьки..Ну да ладно, хорошо что хоть какая-то версия собралась, этого пока достаточно. Возможно, они (io и libevent) в будущем будут дружить лучше :)

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

Только что клонировал дерево и попробовал собрать на своей генте. Словил этот же баг с libevent-2.0.12

Попробую разобраться сегодня. Интересно стало. :)

delete83 ★★
()

В общем, понятно все. Как переписать код под libevent:2 я не знаю и знать не хочу. Проблема кроется в том, что из заголовочных файлов libevent выкинули определение структуры evbuffer. Саму структуру оставили для обеспечения совместимости со старым API, но она явно нигде не используется. Подробнее можете сами изучить, если хотите...

В вашем случае исходники прекрасно скомпилируются и будут работать, если в файл IoEvOutRequest.h в самом конце (до #endif) такой код:

struct evbuffer {
	u_char *buffer;
	u_char *orig_buffer;

	size_t misalign;
	size_t totallen;
	size_t off;

	void (*cb)(struct evbuffer *, size_t, size_t, void *);
	void *cbarg;
};

Удачи вам в изучении этого странного и наполовину рабочего языка. :)

delete83 ★★
()
Ответ на: комментарий от delete83

Действительно данный аддон собрался, но что-то мне говорит, что оно все куда хуже, чем кажется... Т.е.

[ 98%] Built target IoVorbis
[ 98%] Building C object addons/Yajl/CMakeFiles/IoYajl.dir/source/IoYajl.c.o
/home/userx/io/addons/Yajl/source/IoYajl.c: В функции «IoYajl_parse»:
/home/userx/io/addons/Yajl/source/IoYajl.c:250:2: ошибка: unknown type name «yajl_parser_config»
/home/userx/io/addons/Yajl/source/IoYajl.c:250:2: предупреждение: избыточные элементы в инициализаторе скаляра [по умолчанию включена]
/home/userx/io/addons/Yajl/source/IoYajl.c:250:2: предупреждение: (где-то рядом с инициализацией для «cfg») [по умолчанию включена]
/home/userx/io/addons/Yajl/source/IoYajl.c:251:2: предупреждение: в передаче аргумента 2 «yajl_alloc»: несовместимый тип указателя [по умолчанию включена]
/usr/include/yajl/yajl_parse.h:107:26: замечание: expected «struct yajl_alloc_funcs *» but argument is of type «int *»
/home/userx/io/addons/Yajl/source/IoYajl.c:251:2: ошибка: слишком много аргументов в вызове функции «yajl_alloc»
/usr/include/yajl/yajl_parse.h:107:26: замечание: declared here
/home/userx/io/addons/Yajl/source/IoYajl.c:258:11: ошибка: «yajl_status_insufficient_data» undeclared (first use in this function)
/home/userx/io/addons/Yajl/source/IoYajl.c:258:11: замечание: each undeclared identifier is reported only once for each function it appears in
make[2]: *** [addons/Yajl/CMakeFiles/IoYajl.dir/source/IoYajl.c.o] Ошибка 1
make[1]: *** [addons/Yajl/CMakeFiles/IoYajl.dir/all] Ошибка 2
Вот такие вот дела...

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

Вы когда последний раз синхронизировались с деревом исходников? Я вчера вечером клонировал и у меня все прекрасно собралось. Может вы попали под неудачный коммит?

delete83 ★★
()
Ответ на: комментарий от delete83

Вот лог http://dumpz.org/63919/ . Похоже, не Я один такой, на гитхабе в обсуждениях такая же тема, суть в том что оно работает с yajl 1.0.12-1, а все нормальные люди пользуют 2.0.2-1, так как, например, в Arch от этой либы зависит работа pacman, и либа должна быть строго больше 2.0.

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

Это довольно просто. Вам же не нужна поддержка JSON сейчас в io? С такими успехами этот язык не завоюет большой аудитории...

В общем, так. Файл ./io/addons/Yajl/CMakeLists.txt. Строка седьмая такого содержания: find_package(Yajl). Заменяем на SET(YAJL_FOUND FALSE)

Вообще я не знаю, как корректно выключить одну директорию из сборки проекта под cmake, но так вроде должно сработать. У меня этот yajl вообще не установлен и проблем с ним потому не возникло.

delete83 ★★
()
Ответ на: комментарий от delete83

Все успешно собралось. Весьма благодарен Вам, за помощь.

joy4eg ★★★★★
() автор топика

Хочешь модного и хипстерского — ебись. Закон природы. С айфонами точно так же.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.