为静态链接构建gcc

时间:2018-03-25 10:30:43

标签: c++ c gcc cmake

我使用

从源代码构建了自己的gcc
/configure --host=x86_64-linux-gnu --target=x86_64-linux-gnu --enable-checking=release --enable-languages=c,c++ --disable-multilib --program-suffix=-6.4 --prefix=/home/martin/devel/gcc-6.4.0-build
make

一切顺利,除非我想使用cmake使用静态运行时构建我的共享库,如下所示:

cmake_minimum_required(VERSION 2.6)

SET(CMAKE_C_COMPILER /home/martin/devel/gcc-6.4.0-build/bin/gcc-6.4)
SET(CMAKE_CXX_COMPILER /home/martin/devel/gcc-6.4.0-build/bin/g++-6.4)
project(Foo)
add_library(FooLib SHARED main.cpp)
target_link_libraries(FooLib -static-libgcc -static-libstdc++ -static)

当我尝试这样做时,我收到以下错误:

/usr/bin/ld: /home/martin/devel/gcc-6.4.0-build/lib/gcc/x86_64-linux-gnu/6.4.0/crtbeginT.o: relocation R_X86_64_32 against `__TMC_END__' can not be used when making a shared object; recompile with -fPIC
/home/martin/devel/gcc-6.4.0-build/lib/gcc/x86_64-linux-gnu/6.4.0/crtbeginT.o: error adding symbols: Bad value

所以我怀疑gcc没有正确构建,不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

您的GCC配置行中缺少--with-pic。虽然显然有时会出现一些错误:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58638因此您应该添加CFLAGS="-fPIC" CXXFLAGS="-fPIC"以确保安全。