Fedora 22 - compile - __atomic_is_lock_free

Fedora 22 - compile - __atomic_is_lock_free

本文关键字:lock free is Fedora compile atomic      更新时间:2023-10-16

我试图在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?

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

另一个想法是尝试安装- atom,但是我找不到关于。相反,我已经安装了libatomic。我不知道它们是不是一样的

我遇到了同样的问题,是的,你确实需要链接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 && <sudo> make install

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

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

如果你让它链接到libatom,它就会链接到libatom。

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

链接到libatomic.

另一个想法是尝试安装- atom,但是我找不到关于。相反,我已经安装了libatomic。我不知道它们是不是一样的。

你不能"install - atomic",因为-latomic是编译器/链接器选项,它表示链接到libatomic,你也不能"install一个链接器选项",因为它是一个程序的选项,而不是一个包。

你安装libatonic,然后你用-latomic链接到它

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