在centos上使用gcc 4.8.3构建静态链接clang

在centos上使用gcc 4.8.3构建静态链接clang,gcc,compilation,cmake,clang,llvm,Gcc,Compilation,Cmake,Clang,Llvm,我正试图在centos 6上构建一个静态链接的可执行程序。我使用的是从源代码编译的gcc4.8.3 如果使用cmake选项编译-DLLVM\u BUILD\u STATIC=ON,则错误为: CMake Error at cmake/modules/CheckAtomic.cmake:52 (message): Host compiler appears to require libatomic, but cannot find it. Call Stack (most recent cal

我正试图在centos 6上构建一个静态链接的可执行程序。我使用的是从源代码编译的gcc4.8.3

如果使用cmake选项编译
-DLLVM\u BUILD\u STATIC=ON
,则错误为:

CMake Error at cmake/modules/CheckAtomic.cmake:52 (message):
  Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
  cmake/config-ix.cmake:307 (include) 
  CMakeLists.txt:590 (include)
ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in 
`/usr/lib/../lib64/libc.a(strcmp.o)' can not be used when making 
an executable; recompile with -fPIE and relink with -pie
CMake Error at cmake/modules/CheckAtomic.cmake:52 (message):
  Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
  cmake/config-ix.cmake:307 (include) 
  CMakeLists.txt:590 (include)
如果我直接将
-static
标志添加到CMAKE_EXE_LINKER_标志,则错误为:

CMake Error at cmake/modules/CheckAtomic.cmake:52 (message):
  Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
  cmake/config-ix.cmake:307 (include) 
  CMakeLists.txt:590 (include)
ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in 
`/usr/lib/../lib64/libc.a(strcmp.o)' can not be used when making 
an executable; recompile with -fPIE and relink with -pie
CMake Error at cmake/modules/CheckAtomic.cmake:52 (message):
  Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
  cmake/config-ix.cmake:307 (include) 
  CMakeLists.txt:590 (include)
如果我将
-fPIE
添加到CMAKE\u CXX\u标志,并将
-Wl,-pie
直接添加到CMAKE\u EXE\u链接器\u标志,则错误为:

CMake Error at cmake/modules/CheckAtomic.cmake:52 (message):
  Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
  cmake/config-ix.cmake:307 (include) 
  CMakeLists.txt:590 (include)
ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in 
`/usr/lib/../lib64/libc.a(strcmp.o)' can not be used when making 
an executable; recompile with -fPIE and relink with -pie
CMake Error at cmake/modules/CheckAtomic.cmake:52 (message):
  Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
  cmake/config-ix.cmake:307 (include) 
  CMakeLists.txt:590 (include)
检查llvm_build/CMakeFiles/CMakeError.log中的错误消息,我发现cmake使用以下代码检查原子

#include <atomic>
std::atomic<float> x(0.0f);
int main() { return (float)x; }
#包括
标准:原子x(0.0f);
int main(){return(float)x;}
编译此代码的命令是:
/home/hailin/gcc-4.8.3-boost-1.55/rtf/bin/g++-std=c++11-fPIC-fPIE
-Wl-pie
-DHAVE\u CXX\u ATOMICS\u WITH_LIB-std=c++11 main.cpp

/home/hailin/gcc-4.8.3-boost-1.55/rtf/lib/gcc/x86_64-unknown-linux-gnu/4.8.3/../../../../../../../../../../x86_64-unknown-linux-gnu/bin/ld:/usr/lib64//crt1.o:在创建共享对象时,不能使用针对`u libc_ucsu_fini'的重新定位R_x86_64_32;;用-fPIC重新编译 /usr/lib/。/lib64/crt1.o:添加符号时出错:错误值 collect2:错误:ld返回了1个退出状态

如果我删除标志
-Wl,-pie
,错误将消失