From f3e09f36d3140016cd4597d237528783fbfc86c8 Mon Sep 17 00:00:00 2001 From: redfish Date: Sun, 10 Jul 2016 21:05:52 -0400 Subject: [PATCH] cmake: link with -latomic for clang otherwise clang build fails with ../cryptonote_core/libcryptonote_core.a(miner.cpp.o): In function `std::__atomic_base::load(std::memory_order) const': /usr/bin/../lib/gcc/i686-pc-linux-gnu/6.1.1/../../../../include/c++/6.1.1/bits/atomic_base.h:396: undefined reference to `__atomic_load_8' This has no effect on the gcc build. The one strange thing is that test code like std::atomic x; int main() { return x; } compiles and links without errors with clang, without -latomic. This alone would suggest that this patch is unnecessary, but that is not the case. It's not clear exactly why, though. The bitmonero code is including the same header, but it must be doing something more complex than in this test code snippet that causes the failure at link time pasted above. In any case, passing -latomic fixes the problem and seems safe. . --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 673be4a8..2b9deef5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -457,6 +457,11 @@ endif() list(APPEND EXTRA_LIBRARIES ${CMAKE_DL_LIBS}) +if(NOT MINGW) + find_library(ATOMIC atomic) + list(APPEND EXTRA_LIBRARIES ${ATOMIC}) +endif() + include(version.cmake) add_subdirectory(contrib)