LINUX.ORG.RU
решено ФорумAdmin

libgcc_s.so.1 must be installed for pthread_cancel to work

 , ,


0

2

Интересно это криво mariadb собрали или что?
казалось бы и libpthread.so.0 есть, и в ней есть pthread_cancel, и первая она в очереди(относительно libgcc_s.so.1).
или ABI не совпадают либы и бинарника mysqld?
да, был еще переход с 2.6 на 3.4 (deb 6 -> deb 8).

root@hostname1:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.7 (jessie)
Release:        8.7
Codename:       jessie
root@hostname1:~# ldd /usr/sbin/mysqld
        linux-vdso.so.1 (0x00007ffc91769000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1b0186c000)
        libaio.so.1 => /lib/x86_64-linux-gnu/libaio.so.1 (0x00007f1b0166a000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f1b0144f000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f1b011e1000)
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f1b00faa000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1b00da6000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1b00a9b000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1b0079a000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1b003ef000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f1b01a89000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1b001d9000)
root@hostname1:~# ldconfig -p | grep libgcc_s
        libgcc_s.so.1 (libc6,x32) => /usr/libx32/libgcc_s.so.1
        libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libgcc_s.so.1 (libc6) => /lib/i386-linux-gnu/libgcc_s.so.1
        libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1
        libgcc_s.so (libc6) => /usr/lib/gcc/i586-linux-gnu/4.9/libgcc_s.so
root@hostname1:~# nm -D /lib/x86_64-linux-gnu/libgcc_s.so.1 | grep pthread
                 w pthread_getspecific
                 w __pthread_key_create
                 w pthread_key_create
                 w pthread_mutex_lock
                 w pthread_mutex_unlock
                 w pthread_once
                 w pthread_setspecific
root@hostname1:~# objdump -t /usr/lib/x86_64-linux-gnu/libpthread.a  | grep pthread_cancel
0000000000000000         *UND*  0000000000000000 pthread_cancel
000000000000012c g     O .rodata        000000000000000c _thread_db_pthread_cancelhandling
pthread_cancel.o:     формат файла elf64-x86-64
0000000000000000 l    df *ABS*  0000000000000000 pthread_cancel.c
0000000000000000 g     F .text  000000000000009d pthread_cancel
root@hostname1:~# nm -D /lib/x86_64-linux-gnu/libpthread.so.0 | grep cancel
000000000000d1a0 T pthread_cancel
000000000000e1d0 T __pthread_register_cancel
000000000000e210 T __pthread_register_cancel_defer
000000000000d290 T pthread_setcancelstate
000000000000d320 T pthread_setcanceltype
000000000000d250 T pthread_testcancel
000000000000e200 T __pthread_unregister_cancel
000000000000e270 T __pthread_unregister_cancel_restore
root@hostname1:~# ldconfig -p | egrep -e 'libpthread|libgcc_s'
        libpthread.so.0 (libc6,x32, ABI ОС: Linux 3.4.0) => /libx32/libpthread.so.0
        libpthread.so.0 (libc6,x86-64, ABI ОС: Linux 2.6.32) => /lib/x86_64-linux-gnu/libpthread.so.0
        libpthread.so.0 (libc6, hwcap: 0x0008000000008000, ABI ОС: Linux 2.6.32) => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
        libpthread.so.0 (libc6, ABI ОС: Linux 2.6.32) => /lib/i386-linux-gnu/libpthread.so.0
        libpthread.so.0 (libc6, ABI ОС: Linux 2.6.32) => /lib32/libpthread.so.0
        libgcc_s.so.1 (libc6,x32) => /usr/libx32/libgcc_s.so.1
        libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libgcc_s.so.1 (libc6) => /lib/i386-linux-gnu/libgcc_s.so.1
        libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1
        libgcc_s.so (libc6) => /usr/lib/gcc/i586-linux-gnu/4.9/libgcc_s.so

★★★★★

p.s. а так:

root@hostname1:~# cat test.c
int main()
{
  return 0;
}
root@hostname1:~# cc -lpthread test.c -o test-linking
root@hostname1:~# ldd test-linking
        linux-vdso.so.1 (0x00007ffe519fa000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f45af15c000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f45aedb1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f45af379000)

вроде даже как работает и линкуется без превязки к ABI

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

пример из man 3 pthread_cancel

root@hostname1:~# gcc -lpthread test1.c -o test_cancel
root@hostname1:~# ./test_cancel
thread_func(): started; cancellation disabled
main(): sending cancellation request
thread_func(): about to enable cancellation
main(): thread was canceled
root@hostname1:~# ldd ./test_cancel
        linux-vdso.so.1 (0x00007ffd0fdfc000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa3505a5000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa3501fa000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa3507c2000)


root@hostname1:~# gcc -lgcc_s -lpthread test1.c -o test_cancel
root@hostname1:~# ldd test_cancel
        linux-vdso.so.1 (0x00007ffd469ac000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f120d7de000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f120d5c1000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f120d216000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f120d9f4000)
root@hostname1:~# ./test_cancel
thread_func(): started; cancellation disabled
main(): sending cancellation request
thread_func(): about to enable cancellation
main(): thread was canceled

http://man7.org/linux/man-pages/man3/pthread_cancel.3.html#EXAMPLE

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

как ни странно будет это звучать, ребутнул и всё заработало.

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