我尝试在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。我不知道他们是否一样。

最佳答案

我遇到了同样的问题,是的,您确实需要链接libatomic。执行此操作的方法是在运行cmake之前,将以下一行添加到最顶层CMakeLists.txt文件中:set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")

整个流程可能如下所示:

  • 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 && <sudo> make install

  • 您可能需要也可能不需要sudo,这取决于您决定在哪里安装supercollider。

    关于c++ - Fedora 22-编译-__atomic_is_lock_free,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31381892/

    10-10 14:03