我正在尝试构建clang,并将所有库静态链接。这样我就可以在安装古老的GCC 4.4版本的CentOS 6上运行它。
起初,我认为通过打开LLVM_BUILD_STATIC选项添加
动态STT_GNU_IFUNC符号`strcmp'与指针相等在 `/usr/lib/../lib64/libc.a(strcmp.o)'中不能用于制作可执行文件;重新编译并使用-pie重新链接。
所以,我将
我查看了
起初,我认为通过打开LLVM_BUILD_STATIC选项添加
-static
选项就足够了。但在链接阶段,它报错了。动态STT_GNU_IFUNC符号`strcmp'与指针相等在 `/usr/lib/../lib64/libc.a(strcmp.o)'中不能用于制作可执行文件;重新编译并使用-pie重新链接。
所以,我将
-fPIE -Wl,-pie
添加到CMAKE_CXX_FLAGS中,然后它显示:-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB
-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB - Failed
CMake Error at cmake/modules/CheckAtomic.cmake:49 (message):
Host compiler must support std::atomic!
Call Stack (most recent call first):
cmake/config-ix.cmake:307 (include)
CMakeLists.txt:590 (include)
我查看了
cmake/modules/CheckAtomic.cmake
文件,它编译了以下代码。#include <atomic>
std::atomic<float> x(0.0f);
int main() { return (float)x; }
使用命令
/home/hailin/gcc-4.8.3-boost-1.55/rtf/bin/g++ -fPIE -Wl,-pie -DHAVE_CXX_ATOMICS_WITHOUT_LIB -std=c++11 -static -lm
/home/hailin/gcc-4.8.3-boost-1.55/rtf/bin/g++ -fPIE -Wl,-pie -DHAVE_CXX_ATOMICS_WITH_LIB -std=c++11 -static -lm -latomic
使用选项-Wl,-pie
的命令会复制相同的错误。
这似乎是一个死胡同。 -shared
和-fPIE -Wl,-pie
之间是否存在冲突?