Компилирую Mono на Synology 110j (http://www.synology.su/products/29)
При компиляции, получаю вылет с сообщениями об ошибках:
———— кусок вывода ———
LD pedump
./.libs/libmonoruntime.a(libmonoruntime_la-threads.o): In function `mono_thread_kill’:
/root/mono-2.10.2/mono/metadata/threads.c:4421: undefined reference to `pthread_kill'
./.libs/libmonoruntime.a(libmonoruntime_la-threadpool.o): In function `tp_poll_shutdown’:
/root/mono-2.10.2/mono/metadata/../../mono/metadata/tpool-poll.c:97: undefined reference to `sem_destroy'
————————————
И ещё кучу подобных сообщений, но с жалобами на другие функции. Подозреваю, что что-то с библиотекой отвечающей за потоки, но что у меня с ней — не пойму.
Процессор у этой штуки: 800 MHz (MARVELL 88F6281 ARM)
на uname -a отзывается как Linux 2.6.32.12 #2166 Fri Jan 13 21:12:19 CST 2012 armv5tel GNU/Linux
Буду благодарен за любую наводку…
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
> /root/mono-2.10.2/mono/metadata/threads.c:4421: undefined reference to `pthread_kill'
В файле не подключается (вряд ли — ведь это Mono, который собирается многими?) или в системе не установлена libpthread. Сабж входит в состав libc. Похоже, у вас в системе она какая-то «урезанная».
Чтобы понять, что у вас за дистрибутив Linux, лучше выполнить «lsb_release -a» или попробовать «cat /etc/*release /etc/*release».
Команда lsb_release отсутствует. В /etc/ не обнаружил чего-либо, чтобы дало понимание на чём всё это собрано. Но косвенные признаки указывают на некий nslu2-linux.
Исследование libpthread показало следующее…
>nm -D /lib/libpthread.so.0 | grep «thread_kill»
0000ce58 T pthread_kill
00010e08 T pthread_kill_other_threads_np
Если я правильно всё понимаю, то функции таки есть. Так чего ему не хватает?
> Так чего ему не хватает?
1. не хватает указание библиотеки libpthread в сборке: -l pthread
2. в некоторых дистрибутивах, или даже UNIX-like системах (QNX, Solaris) — libpthread входит в число дефаултных, а в некоторых нет.
3. это определяется дефаултными параметрами сборки gcc, можете поразвлекаться: $ gcc --help и далее уточняясь… (какие же говённые средства вставки на этом форуме!!!)
4. по поводу сборок на ARM посмотрите: http://rus-linux.net/forum/viewtopic.php?f=5&t=1516 , http://rus-linux.net/forum/viewtopic.php?f=5&t=1595
> Так чего ему не хватает?
Можете попробовать что-то такого типа:
$ make LDLIBS+=’-l pthread'
или
$ make CFLAGS+=’-Wl,-lpthread'
Благодарю всех за помощь. Всё это добро компилируется при следующих заклинаниях:
В начале химичим с libpthread
>mkdir /opt/arm-none-linux-gnueabi/lib_disabled
>mv /opt/arm-none-linux-gnueabi/lib/libpthread* /opt/arm-none-linux-gnueabi/lib_disabled
>cp /lib/libpthread.so.0 /opt/arm-none-linux-gnueabi/lib/
>cd /opt/arm-none-linux-gnueabi/lib/
>ln -s libpthread.so.0 libpthread.so
>ln -s libpthread.so.0 libpthread-2.5.so
Потом химичим с perl
/opt/etc/ipkg/cross-feed.conf изменить на
src/gz cross ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable
>ipkg remove perl
>ipkg install perl
Ну и, собственно, сборка выглядит следующим образом:
>./configure --prefix=/usr --sysconfdir=/etc/mono
>make CFLAGS+=’-Wl,-lpthread,-lrt'
В итоге:
> mono -V
Mono JIT compiler version 2.10.9 (tarball Fri Mar 9 17:46:38 MSK 2012)
Copyright © 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
TLS: normal
SIGSEGV: normal
Notifications: epoll
Architecture: armel,soft-float
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: Included Boehm (with typed GC and Parallel Mark)