链接到TLS libpthread-2.3.4.so库而不是系统libpthread库

时间:2012-01-02 09:18:54

标签: linux pthreads linker-errors redhat

我正在使用/usr/include/nptl/pthread.h中的pthread_setaffinity_np等函数。

然而,链接器抱怨找不到“pthread_setaffinity_np”,据我所知,链接器在错误的pthread库(/usr/lib/libpthread.so)中查找不包含的引用支持CPU亲和力。我在RedHat 4上。

我相信我必须链接到包含此功能的/lib/tls/libpthread-2.3.4.so。但是,链接到libpthread-2.3.4.so会导致其他链接器错误。

在RedHat 4上链接到libpthread-2.3.4.so的正确方法是什么?

提前致谢,

2 个答案:

答案 0 :(得分:2)

  

据我所知,链接器正在错误的pthread库中寻找引用

您的理解不正确

/usr/lib/libpthread.so是一个链接描述文件,它将您的程序与libpthread.so.0libpthread_nonshared.a相关联。 libpthread.so.0是(应该是)符号链接,最有可能是libpthread-2.3.4.so

您的系统上可能安装了多个libpthread-2.3.4.so版本:/lib/i686中的一个,/lib/tls中的一个,/lib中的一个。在运行时使用哪一个取决于您的硬件和内核。

以下命令会打印什么?

find /lib -name 'libpthread.so.0' | xargs nm -A | grep pthread_setaffinity_np

ldd /usr/bin/date

答案 1 :(得分:0)

它可能不起作用。 NPTL现在在GNU libc中。它与内核的版本密切相关(你可能正在使用旧内核的一些古老的发行版。)。

好的解决方案是将系统升级到提供最近足够的NPTL(以及最近足够的内核)以满足您的需求。处理器关联性在 pthread 库(通常与libc打包)内部和内核内部处理(因为它与调度程序相关)。

为什么不安装,例如CentOS 6a derivative of RedHat)?