我正在使用/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的正确方法是什么?
提前致谢,
保
答案 0 :(得分:2)
据我所知,链接器正在错误的pthread库中寻找引用
您的理解不正确。
/usr/lib/libpthread.so
是一个链接描述文件,它将您的程序与libpthread.so.0
和libpthread_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 6(a derivative of RedHat)?