在我的Debian x86 32位中,当我执行readelf -r /usr/lib/libstdc++.so.6 | grep的并行线程,我得到这样的输出:ELF重新定位 - 哪里来自这些符号?
000eceac 00006206 R_386_GLOB_DAT 00000000 pthread_cancel
000ed058 00000807 R_386_JUMP_SLOT 00000000 pthread_cond_destroy
000ed148 00001207 R_386_JUMP_SLOT 00000000 pthread_cond_signal
000ed1e8 00001e07 R_386_JUMP_SLOT 00000000 pthread_key_create
000ed320 00002a07 R_386_JUMP_SLOT 00000000 pthread_once
000ed418 00003607 R_386_JUMP_SLOT 00000000 pthread_getspecific
000ed42c 00003a07 R_386_JUMP_SLOT 00000000 pthread_mutex_unlock
000ed4ec 00004607 R_386_JUMP_SLOT 00000000 pthread_create
000ed54c 00004b07 R_386_JUMP_SLOT 00000000 pthread_equal
000ed678 00005607 R_386_JUMP_SLOT 00000000 pthread_mutex_lock
000ed71c 00006007 R_386_JUMP_SLOT 00000000 pthread_cond_wait
000ed7b0 00006907 R_386_JUMP_SLOT 00000000 pthread_key_delete
000ed8b4 00007307 R_386_JUMP_SLOT 00000000 pthread_cond_broadcast
000ed8c0 00007507 R_386_JUMP_SLOT 00000000 pthread_detach
000ed8f0 00007a07 R_386_JUMP_SLOT 00000000 pthread_setspecific
000ed968 00007c07 R_386_JUMP_SLOT 00000000 pthread_join
然而
当我列出/usr/lib/libstdc++.so.6的libpthread的依赖性没有列出:
[email protected]:~$ ldd /usr/lib/libstdc++.so.6
linux-gate.so.1 => (0xb77df000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb76ad000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7566000)
/lib/ld-linux.so.2 (0xb77e0000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7547000)
所以如何将这些依赖关系由动态加载程序解决?我在__gmon_start__中发现了一个类似的问题,粗略地说,这个符号的定义是什么?
为什么这些定义没有按” t出现在定义为依赖关系的库中? – JohnTortugo