我从源头上建立了自己的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的建筑不合适,不知道怎么做。
发布于 2018-03-25 02:34:32
您丢失了GCC配置线中的--with-pic
。虽然很明显,有时会有一些bug:bug.cgi?id=58638,所以为了安全起见,您应该添加CFLAGS="-fPIC" CXXFLAGS="-fPIC"
。
https://stackoverflow.com/questions/49474821
复制相似问题