LINUX.ORG.RU

Частые сегфолты R под HP-UX (проблема со сборкой?)

 ,


0

1

Собираю R 3.4.3 на HP-UX 11.31 с GCC 4.9.2. К удивлению, компилится до конца, но потом начинают лезть сегфолты. Т.е. некоторые вещи работают:

> 1+2
[1] 3
> sum(c(1,2))
[1] 3
> var(c(1,2,3))
[1] 1

Ну а некоторые нет:

> pgamma(1,Inf,Inf)
*** caught segfault ***
address d0650000, cause 'invalid permissions'

Traceback:
1: pgamma(1, Inf, Inf)

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Selection: 1
R is aborting now ...
Segmentation fault (core dumped)

'Причина' у сегфолтов бывает довольно разной.

Вообще говоря, если собирать с --with-readline, то крашится не доходя до промта:

/usr/lib/hpux32/dld.so: Unsatisfied code symbol 'tgetent' in load module '$LOCAL/lib/libreadline.sl.7'.
Killed

GCC'ные C и С++ компиляторы уже были в системе, gfortran пришлось собрать самому. Однако это получилось сделать не сразу, и у меня есть подозрения, что он не совсем корректно может работать, хоть сборка была и через трехшаговый бутстрап со всем полагающимся. Так что хотелось бы gfortran сразу исключить.

Куда еще можно посмотреть? Тулчейн на сервере по однородности можно сравнить с лоскутным одеялом.

Прикладываю на всякий случай еще вывод file и ldd:

$ file bin/exec/R
bin/exec/R:     ELF-32 executable object file - IA64

$ ldd bin/exec/R

bin/exec/R:
         /usr/lib/hpux32/libpthread.so =>        /usr/lib/hpux32/libpthread.so
         libRblas.sl =>  $LOCAL/var/build/R-3.4.3/lib/libRblas.sl
         libgfortran.so.3 =>     $LOCAL/lib/libgfortran.so.3
         libm.so.1 =>    /usr/lib/hpux32/libm.so.1
         libunwind.so.1 =>       /usr/lib/hpux32/libunwind.so.1
         libdl.so.1 =>   /usr/lib/hpux32/libdl.so.1
         /usr/local/lib/hpux32/libintl.so =>     /usr/local/lib/hpux32/libintl.so
         /usr/local/lib/hpux32/libiconv.so =>    /usr/local/lib/hpux32/libiconv.so
         libpcre.so.3 => $LOCAL/lib/libpcre.so.3
         liblzma.so =>   /usr/local/lib/hpux32/liblzma.so
         libbz2.so =>    /usr/local/lib/hpux32/libbz2.so
         libz.so =>      /usr/local/lib/hpux32/libz.so
         libnsl.so.1 =>  /usr/lib/hpux32/libnsl.so.1
         librt.so.1 =>   /usr/lib/hpux32/librt.so.1
         libc.so.1 =>    /usr/lib/hpux32/libc.so.1
         libgfortran.so.3 =>     $LOCAL/lib/libgfortran.so.3
         libm.so.1 =>    /usr/lib/hpux32/libm.so.1
         libunwind.so.1 =>       /usr/lib/hpux32/libunwind.so.1
         libgcc_s.so.0 =>        $LOCAL/lib/libgcc_s.so.0
         libm.so.1 =>    /usr/lib/hpux32/libm.so.1
         libc.so.1 =>    /usr/lib/hpux32/libc.so.1
         libgcc_s.so.0 =>        $LOCAL/lib/libgcc_s.so.0
         libunwind.so.1 =>       /usr/lib/hpux32/libunwind.so.1
         libuca.so.1 =>  /usr/lib/hpux32/libuca.so.1
         libiconv.so =>  /usr/local/lib/hpux32/libiconv.so
         libc.so.1 =>    /usr/lib/hpux32/libc.so.1
         libc.so.1 =>    /usr/lib/hpux32/libc.so.1
         libpthread.so.1 =>      /usr/lib/hpux32/libpthread.so.1
         libc.so.1 =>    /usr/lib/hpux32/libc.so.1
         libc.so.1 =>    /usr/lib/hpux32/libc.so.1
         libxti.so.1 =>  /usr/lib/hpux32/libxti.so.1
         libdl.so.1 =>   /usr/lib/hpux32/libdl.so.1
         libc.so.1 =>    /usr/lib/hpux32/libc.so.1
         libunwind.so.1 =>       /usr/lib/hpux32/libunwind.so.1

Везде выше $LOCAL — это некоторое потаенное дерево, куда локально ставится около-гнушный софт.


/usr/lib/hpux32/dld.so: Unsatisfied code symbol 'tgetent' in load module '$LOCAL/lib/libreadline.sl.7'.
Killed

Тут, на аналогичную ошибку, советуют пересобрать с -lcurses

cPunk ★★
()

HP-UX и IA64 полны потаённых загадок :-)

для сборки всякого научного софта помниться приходилось сначала собирать компилятор (про gcc речь), иначе уплывала точность и появлялись внезапные сегфолты в неожиданных местах.

MKuznetsov ★★★★★
()

HP-UX 11.31

Верни ненужно в музей.

anonymous
()
Ответ на: комментарий от cPunk

Да, спасибо, тоже это видел. У меня подозрение, что проблема системная, так что если я её решу в общем, то автоматически починится и readline.

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

gcc собирал другой человек до меня, но, кажется, всё идет к тому, что придется пересобирать самостоятельно весь тулчейн.

Кстати, нет ли в природе хорошего мануала по сборке «вообще»? Может, я что-то упускаю...

xio
() автор топика

Обязателен ли hp-ux и 32-bit ABI? Linux на 64-bit вроде бы работает нормально.

> 1+2
[1] 3
> pgamma(1,Inf,Inf)
[1] NaN
Предупреждение:
В pgamma(1, Inf, Inf) : созданы NaN
> pgamma(1,Inf,Inf)
[1] NaN
Предупреждение:
В pgamma(1, Inf, Inf) : созданы NaN
# uname -rmpio
4.9.72-gentoo ia64 Dual-Core Intel(R) Itanium(R) Processor 9040 GenuineIntel GNU/Linux
# gcc --version | head -n 1
gcc (Gentoo 7.2.0 p1.1) 7.2.0

Кросс-компиляцией заниматься можно, но она требует некоторых знаний о тулчейне. С наскока может не получиться.

Gentoo позволяет собрать непривилегированное окружение прямо в домашнем каталоге: https://wiki.gentoo.org/wiki/Project:Prefix/Manual_Bootstrap

Скрипт бутстрапа: https://gitweb.gentoo.org/repo/proj/prefix.git/plain/scripts/bootstrap-prefix.sh

Более детально о процессе сборки всего тулчейна неплохо написано в : http://linuxfromscratch.org/ . Но это linux и GNU окружение. В остальных средах будет больше специфических багов.

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

Сделай ldd, пож-та?

Alas, hp-ux обязателен, 32 bit ABI пока тоже (гнушная часть тулчейна вся 32 битная).

Про кросс-компиляцию по образу и подобию LFS начинаю задумываться, но хотелось бы обойтись малой кровью :) Спасибо.

xio
() автор топика
Ответ на: комментарий от xio
$ lddtree /usr/lib/R/bin/exec/R
/usr/lib/R/bin/exec/R (interpreter => /lib/ld-linux-ia64.so.2)
    libR.so => /usr/lib/R/lib/libR.so
        libblas.so.3 => /usr/lib/libblas.so.3
            libgcc_s.so.1 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libgcc_s.so.1
        libgfortran.so.4 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libgfortran.so.4
        libm.so.6.1 => /lib/libm.so.6.1
        libunwind.so.7 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libunwind.so.7
        libquadmath.so.0 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libquadmath.so.0
        libreadline.so.7 => /lib/libreadline.so.7
            libncurses.so.6 => /lib/libncurses.so.6
        libpcre.so.1 => /lib/libpcre.so.1
        liblzma.so.5 => /lib/liblzma.so.5
        libbz2.so.1 => /lib/libbz2.so.1
        libz.so.1 => /lib/libz.so.1
        libtirpc.so.3 => /lib/libtirpc.so.3
        librt.so.1 => /lib/librt.so.1
        libdl.so.2 => /lib/libdl.so.2
    libgomp.so.1 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libgomp.so.1
    libpthread.so.0 => /lib/libpthread.so.0
    libc.so.6.1 => /lib/libc.so.6.1
$ ldd /usr/lib/R/bin/exec/R
        linux-gate.so.1 (0xa000000000000000)
        libR.so => /usr/lib/R/lib/libR.so (0x200000000006c000)
        libgomp.so.1 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libgomp.so.1 (0x2000000000778000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x20000000007e4000)
        libc.so.6.1 => /lib/libc.so.6.1 (0x200000000082c000)
        libblas.so.3 => /usr/lib/libblas.so.3 (0x2000000000b00000)
        libgfortran.so.4 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libgfortran.so.4 (0x2000000000bd0000)
        libm.so.6.1 => /lib/libm.so.6.1 (0x2000000000e68000)
        libunwind.so.7 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libunwind.so.7 (0x2000000000fdc000)
        libquadmath.so.0 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libquadmath.so.0 (0x2000000001008000)
        libreadline.so.7 => /lib/libreadline.so.7 (0x2000000001098000)
        libpcre.so.1 => /lib/libpcre.so.1 (0x2000000001134000)
        liblzma.so.5 => /lib/liblzma.so.5 (0x20000000011bc000)
        libbz2.so.1 => /lib/libbz2.so.1 (0x2000000001214000)
        libz.so.1 => /lib/libz.so.1 (0x2000000001248000)
        libtirpc.so.3 => /lib/libtirpc.so.3 (0x2000000001284000)
        librt.so.1 => /lib/librt.so.1 (0x20000000012e8000)
        libdl.so.2 => /lib/libdl.so.2 (0x2000000001308000)
        /lib/ld-linux-ia64.so.2 (0x2000000000000000)
        libgcc_s.so.1 => /usr/lib/gcc/ia64-unknown-linux-gnu/7.2.0/libgcc_s.so.1 (0x2000000001320000)
        libncurses.so.6 => /lib/libncurses.so.6 (0x2000000001358000)
sf ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.