Mam prosty program testowy, wywołujący pthread_cond_broadcast
.Różne symbole z glibc/pthreads używane podczas używania linku złotego vs Ld
W połączeniu z ld
łącznika, co pokazuje:
Przypadek 1:
$ nm ld-test | grep cond_broadcast
U [email protected]@GLIBC_2.3.2
W połączeniu z gold
łącznik pokazuje:
Przypadek 2:
$ nm gold-test | grep cond_broadcast
U pthread_cond_broadcast
pthread/libc zawiera kilka symboli pthread_cond_broadcast wi różne symbole wersji prawdopodobnie od czasu zmiany ABI.
$ nm /lib64/libc.so.6 |grep cond_broadca
00000036b84f7d30 t __pthread_cond_broadcast
00000036b85278f0 t __pthread_cond_broadcast_2_0
00000036b84f7d30 T [email protected]@GLIBC_2.3.2
00000036b85278f0 T [email protected]_2.2.5
$ nm /lib64/libpthread.so.0 |grep cond_broadcast
00000036b880bee0 t __pthread_cond_broadcast
00000036b880c250 t __pthread_cond_broadcast_2_0
00000036b880bee0 T [email protected]@GLIBC_2.3.2
00000036b880c250 T [email protected]_2.2.5
więc pytania są:
- Dlaczego różne zachowanie między
gold
i starego/normalnejld
. - Który symbol pthread_cond_broadcast jest używany w środowisku wykonawczym w przypadku 2, gdy plik binarny jest połączony z niewersjonowanym symbolem
pthread_cond_broadcast
. Najnowsza implementacja pthread_cond_broadcast? Najstarszy ?
ta używa gcc 4.9.2 a łącznik złoto/ld z binutils 2.24