在centos上使用gcc 4.8.3构建静态链接clang
我正试图在centos 6上构建一个静态链接的可执行程序。我使用的是从源代码编译的gcc4.8.3 如果使用cmake选项编译在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
-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
,错误将消失