c++ - 为静态链接构建 gcc

标签 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 没有正确构建,不知道该怎么做。

最佳答案

您在 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/

相关文章:

C++ 模板化类型定义

c++ - "Creation point"自动变量

c++ - 在 msvc 中为 uint8_t 和类似类型包含或项目设置?

C 通过引用传递结构

c++ - Hook ishellfolder enumobjects

c - 如何在 GCC 中收到无符号整数溢出而不是环绕的警告?

c++ - 让编译器生成 adc 指令

c++ - 如何在omnet++中模拟车辆运动?

linux - 安装依赖 SciKit/NumPy/SciPy

c - 分析编号处理代码 : 28% of time in fegetexcept() & optimal compiler flags?