我使用源代码构建了自己的 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 没有正确构建,不知道该怎么做。
最佳答案
您在 GCC 配置行中缺少 --with-pic
。虽然显然有时会有一些错误:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58638所以你应该添加 CFLAGS="-fPIC"CXXFLAGS="-fPIC"
为了安全。
关于c++ - 为静态链接构建 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49474821/