【问题标题】:Fedora 22 - compile - __atomic_is_lock_freeFedora 22 - 编译 - __atomic_is_lock_free
【发布时间】:2015-10-01 15:07:37
【问题描述】:

我尝试在 Fedora 22 上编译一个软件(SuperCollider)但我遇到了一个问题:

libsupernova.a(server.cpp.o): In function `std::atomic<boost::lockfree::detail::tagged_index>::is_lock_free() const':
/usr/include/c++/5.1.1/atomic:212: undefined reference to `__atomic_is_lock_free'
collect2: error: ld returned 1 exit status
server/supernova/CMakeFiles/supernova.dir/build.make:96: recipe for target 'server/supernova/supernova' failed
make[2]: *** [server/supernova/supernova] Error 1
CMakeFiles/Makefile2:3383: recipe for target 'server/supernova/CMakeFiles/supernova.dir/all' failed
make[1]: *** [server/supernova/CMakeFiles/supernova.dir/all] Error 2
Makefile:146: recipe for target 'all' failed
make: *** [all] Error 2

在我看来,这是 libatomic 的一个问题。 gcc有没有可能没有链接到libatomic?

有人知道如何解决这个问题吗?

另一个想法是尝试安装 -latomic,但我找不到有关的信息。 相反,我已经安装了 libatomic。不知道是不是一样的。

【问题讨论】:

  • 在 ./Configure ... 编辑 Makefile 后找到并更改该行:CNF_EX_LIBS=-pthread 为 CNF_EX_LIBS="-pthread -latomic

标签: c++ gcc boost fedora


【解决方案1】:

我遇到了同样的问题,是的,您确实需要链接 libatomic。这样做的方法是在运行 cmake 之前将 set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic") 添加到顶级 CMakeLists.txt 文件中。

完整的流程可能如下所示:

  • git clone https://github.com/supercollider/supercollider.git
  • cd supercollider
  • set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic") 添加到顶级CMakeLists.txt
  • 运行ccmake . 配置安装
  • mkdir _build ; cd _build
  • cmake ..
  • make &amp;&amp; &lt;sudo&gt; make install

您可能需要也可能不需要 sudo,具体取决于您决定安装 supercollider 的位置。

【讨论】:

    【解决方案2】:

    在我看来,这是 libatomic 的一个问题。 gcc有没有可能没有链接到libatomic?

    如果你告诉它,它只会链接到 libatomic。

    有人知道如何解决这个问题吗?

    链接到 libatomic。

    另一个想法是尝试安装 -latomic,但我找不到有关的信息。相反,我已经安装了 libatomic。不知道是不是一样的。

    您不能“安装 -latomic”,因为 -latomic 是表示链接到 libatomic 的编译器/链接器选项,并且您不能“安装链接器选项”,因为它是程序的选项,而不是包。

    您安装 libatomic,然后使用 -latomic 链接到它

    (旁白:我希望修复 GCC,这样您就不需要在简单的情况下显式使用 -latomic,只有更复杂的情况,请参阅 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65913

    【讨论】:

    • 这是个好消息。我确实在寻找如何将 libatomic 链接到 gcc。你能告诉我怎么做或在哪里可以找到相关信息吗?
    • 我不明白这个问题,我不是已经回答了吗? 您安装 libatomic,然后使用 -latomic 链接到它。使用dnf install libatomic 安装它,然后在链接时使用-latomic
    • 抱歉,我不太清楚。我安装了libatomic。现在我被困住了。
    • 我的意思是:你如何链接事物?
    • 在构建 SuperCollider 时使用 -latomic。为了让 CMake 做到这一点,我想你想要像 TARGET_LINK_LIBRARIES(atomic) 这样的东西
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多