c++ - Fedora 22 - 编译 - __atomic_is_lock_free

标签 c++ gcc boost fedora

我尝试在 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。这样做的方法是添加到行:set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")在运行 cmake 之前到顶层 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 && <sudo> make install

根据您决定安装 supercollider 的位置,您可能需要也可能不需要 sudo。

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

相关文章:

c++ - RcppArmadillo expmat 挂起 4x4 矩阵

gcc - __attribute__ vector_size(16) 是什么意思?

c++ - 如果一个类没有完全实现,我可以强制共享 C++ 库无法构建吗?

c++ - boost::iostreams::copy - sink - ENOSPC(设备上没有剩余空间)错误处理

boost - 使用 bjam 进行简单安装

c++ - 如果在 C++ 类中省略复制构造函数,会发生什么(确切地)?

C++ 命名空间歧义

c++ - WinInet ftp 连接错误 123

c++ - GCC5 : Nested variable template is not a function template?

c++ - 如何在 Windows 上安装 boost