【问题标题】:what's the difference between pthread in /lib64/libc.so.6 with /usr/lib/libpthread.a? [duplicate]/lib64/libc.so.6 中的 pthread 与 /usr/lib/libpthread.a 有什么区别? [复制]
【发布时间】:2014-01-06 09:10:06
【问题描述】:

/lib64/libc.so.6 中的 pthread 与 /usr/lib64/libpthread.a 有什么区别?

如果我使用 pthread,是否应该在链接时添加 -lpthread?

我注意到 gcc 在链接时会自动添加 -llibc ,如果是这样,我认为不需要添加 -lpthread !我的理解正确吗?

【问题讨论】:

  • 那是libpthread.a 不是libpthread.so
  • 无需使用打印屏幕显示控制台输出。请复制文本并使用 ctrl-k 或编辑器中的“代码格式”按钮对其进行格式化。
  • /usr/lib64/libpthread.so 和 /usr/lib64/libpthread.a 都存在

标签: c++ pthreads


【解决方案1】:

看到这个问题:Does linking an `-lpthread` changes application behaviour? (Linux, Glibc)

glibc 中的 pthreads 函数是存根,提供它是为了更容易编写可在线程或非线程环境中运行的代码。他们实际上什么都不做。

如果您真的想使用 pthreads,那么您确实需要使用 -lpthread 链接。

【讨论】:

  • 但是如果 glibc 中的 pthread 只提供存根,为什么 getpid() 和 pthread_self() 可以返回正确的值?
  • 但是如果 glibc 中的 pthread 只提供存根,为什么 getpid() 和 pthread_self() 没有添加链接 -lpthread 可以返回正确的值
  • 写入存根是为了返回在非线程环境中有意义的值。但是,如果您尝试例如。创建一个线程,你会发现你做不到。更多信息在这里ohloh.net/p/libpthread-stubs
  • 是弱引用吗?
  • @jiafu - 是的,它们是弱符号,否则你将无法链接真正的 pthread 库
猜你喜欢
  • 2012-11-27
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 2019-07-19
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
相关资源
最近更新 更多