【发布时间】:2017-05-12 06:09:18
【问题描述】:
我正在尝试构建 clang,所有库都静态链接。这样我就可以在 CentOS 6 上运行它,使用古老的 GCC 4.4 版本。
起初,我认为通过打开 LLVM_BUILD_STATIC 添加选项 -static 就足够了。但是在链接阶段,它会出错。
动态 STT_GNU_IFUNC 符号 `strcmp' 在 `/usr/lib/../lib64/libc.a(strcmp.o)' 中具有指针相等性,不能在制作可执行文件时使用;使用 -fPIE 重新编译并使用 -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之间有冲突吗?
【问题讨论】:
标签: gcc compilation static-linking