nixp.ru v3.0

29 мая 2017,
понедельник,
08:59:20 MSK

DevOps с компанией «Флант»
AndyGrom написал 4 марта 2012 года в 14:49 (1704 просмотра) Ведет себя неопределенно; открыл 1 тему в форуме, оставил 2 комментария на сайте.

Компилирую 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

Буду благодарен за любую наводку…

Дмитрий Шурупов

> /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».

AndyGrom

Команда 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

Если я правильно всё понимаю, то функции таки есть. Так чего ему не хватает?

olej.tsil

> Так чего ему не хватает?

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

 

 

olej.tsil

> Так чего ему не хватает?

Можете попробовать что-то такого типа:

$ make LDLIBS+=’-l pthread'

или

$ make CFLAGS+=’-Wl,-lpthread'

AndyGrom

Благодарю всех за помощь. Всё это добро компилируется при следующих заклинаниях:

В начале химичим с 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)