Fedora 22 - compile - __atomic_is_lock_free
Fedora 22 - compile - __atomic_is_lock_free
我试图在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)
相关文章:
- 尝试构建"lock-free"数据结构C++
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- 调用 free() 有时会导致程序崩溃
- Valgrind 大小为 8 且地址 0x5b7e520 的读取无效,在大小为 16 的块内为 0 字节 free'd
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- 为什么 free() 函数不将内存返回给操作系统?
- 在 std::tie 中使用 std::weak_ptr::lock()
- "fast"或"normal"在"free(): invalid next size (fast)"中是什么意思?
- 逻辑'double free or corruption (fasttop)'错误
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- "lock cmpxchg"如何在装配中工作?
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- free():在有效指针异常中-使用流读取巨大文件时
- C-Free and MySQL connect
- 为什么FREE块堆这么大
- std::free线程安全吗
- 为什么'allocate in one library and free in the other'是错误的
- "lock-free"的含义是否由C++标准定义?