【问题标题】:GCC 4.7, including <stdatomic.h>GCC 4.7,包括 <stdatomic.h>
【发布时间】:2012-04-12 16:15:15
【问题描述】:

我刚刚编译了 GCC 4.7 以使用 stdatomic.h,但我似乎无法使用 -I 它。 stdatomic.h 似乎住在/usr/include/c++/4.4.3 中,但是链接器告诉我它需要附近的目录中的一堆其他文件。如果我-I 所有这些,我仍然会收到错误undefined reference to atomic_flag_clear_explicit。任何想法我应该如何链接这个权利?

【问题讨论】:

  • 4.7 的源码包不是也附带了 4.7 的 libstdc++ 吗?
  • 哦,我明白了,你的意思是我可能链接到错误的包含?让我看看。
  • @K.G. &lt;stdatomic.h&gt; 是标准 C,而不是 C++。
  • 你确定你得到了正确的编译器吗?试试gcc --version 看看你用的是什么版本。您可能希望使用gcc-4.7 来确保您获得正确的编译器,该编译器将内置所有正确的路径。
  • @JoachimPileborg:是的,我用“--program-suffix=-4.7”编译它,所以它调用了正确的版本。

标签: gcc include atomic gcc4.7


【解决方案1】:

首先,如果您使用 GCC 4.7 进行编译,则不应从 GCC 4.4 的目录中包含或链接 任何内容

第二,-I只影响头文件的搜索路径。 “未定义的引用”是一个链接器错误,通常意味着它没有找到正确的库。使用-L 更改库搜索路径。链接器没有说它没有找到具有正确名称的库,它说它没有找到符号,所以很明显它找到的库没有那个符号。我建议您遇到版本控制问题,可能是由安装问题引起的。

【讨论】:

    【解决方案2】:

    GCC 4.4 和 4.5 中的 标头来自 C++0x 原子的早期草案,但不是最终标准的一部分,因此已从 libstdc++ 中删除。

    C++ 编译器通过 C++11 标头支持 C++11 原子,因此您应该在 C++ 代码中使用该标头。

    当 C 编译器支持 C11 atomics 时,将再次提供 头文件。

    【讨论】:

      【解决方案3】:

      使用这个命令解决了我的问题:

      $ scl enable devtoolset-7 bash
      

      在 CentOS 7 上输入 sudo make altinstall 以安装 Python 3.8.5 时,我遇到了与您相同的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-11
        • 2018-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多