【问题标题】:Difference between -pthread and -pthreads for C/C++ on Ubuntu 14.04Ubuntu 14.04 上 C/C++ 的 -pthread 和 -pthreads 之间的区别
【发布时间】:2015-02-02 18:28:49
【问题描述】:

我目前正在尝试在 Ubuntu 14.04 LTS 上编译 https://github.com/OpenKinect/libfreenect,但它失败了。在 CMake 日志中,我看到有关“-pthreads”库的错误未找到,但它发现“-pthread”没有问题。两者有什么区别? Ubuntu 上的 -pthreads 是否有任何特定的软件包?

【问题讨论】:

    标签: ubuntu cmake


    【解决方案1】:

    根据 GCC 手册页,-pthread-pthreads 是特定于体系结构的标志。这些标志并非都适用于所有拱门。如果两个标志都可用,它们似乎是彼此的同义词。因此,在没有看到您确切的错误输出的情况下,我最好的猜测是您遇到的错误是 GCC 的“-pthreads”标志不适用于您的架构。

    我建议您阅读编译器的手册页,以获取有关您的特定编译器构建可用哪些选项的更多信息。

    【讨论】:

      【解决方案2】:

      除了jayhendren's answer

      您应该尽可能避免硬编码特定于架构的标志,例如 -pthread。而是尽可能将它们隐藏在构建系统的深处,以便在需要将项目移植到需要不同标志的新平台时轻松调整它们。

      特别是对于线程,更喜欢FindThreads module 而不是硬编码参数:

      find_package(Threads)
      
      target_link_libraries(myExecutable Threads::Threads)
      

      当您在第三方库中遇到问题时,如果您认为这是阻止它在您的平台上编译的唯一原因,您可能需要提交错误报告/提交有关该问题的补丁。

      【讨论】:

        【解决方案3】:

        -pthread 和 -pthreads 是编译器开关。 Pthreads 或 POSIX 线程是规范的名称,Linux 中的实现是“LinuxThreads”,NPTL 都由 GNU libc 提供,后者更新。 getconf GNU_LIBPTHREAD_VERSION 显示了实现。 man 7 pthreads 指示在编译使用 Pthread 的程序时使用“-pthread”。

        安装“libpthread-stubs0-dev”包后重试。

        【讨论】:

        • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
        猜你喜欢
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 2010-10-23
        • 2013-05-02
        相关资源
        最近更新 更多