You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让源码编译的g++始终使用自行编译的libstdc++

自定义编译GCC后优先链接自身libstdc++.so的解决办法

问题

我在/home/user/toolchains/gcc/路径下编译了GNU编译器集合,但使用新编译的g执行命令时,返回的仍是系统的libstdc.so路径:

$ g++ -print-file-name=libstdc++.so
/usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.so

我清楚需要在链接阶段为GCC配置RUNPATH或RPATH信息,使其优先链接自行编译的/home/user/toolchains/gcc/lib64/libstdc++.so.6.0.33(从GCC视角等价于$ORIGIN/../lib64/libstdc++.so.6.0.33)。CMake项目里可以通过-DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$HOME/toolchains/gcc/lib64"设置,但不知道如何在GCC自身的编译流程中实现该配置。

以下是我当前使用的编译脚本:

#!/usr/bin/bash

gcc_version=14.2.0
wget https://ftp.gnu.org/gnu/gcc/gcc-${gcc_version}/gcc-${gcc_version}.tar.xz
wget https://ftp.gnu.org/gnu/gcc/gcc-${gcc_version}/gcc-${gcc_version}.tar.xz.sig
wget https://ftp.gnu.org/gnu/gnu-keyring.gpg
signature_invalid=`gpg --verify --no-default-keyring --keyring ./gnu-keyring.gpg gcc-${gcc_version}.tar.xz.sig`
if [ $signature_invalid ]; then echo "Invalid signature" ; exit 1 ; fi
tar -xvJf gcc-${gcc_version}.tar.xz
cd gcc-${gcc_version}
./contrib/download_prerequisites
cd ..
mkdir gcc-${gcc_version}-build
cd gcc-${gcc_version}-build
$PWD/../gcc-${gcc_version}/configure \
    --prefix=$HOME/toolchains/gcc \
    --enable-languages=c,c++ \
    --program-suffix=-${gcc_version}\
    --disable-multilib    \
    --with-system-zlib    \
    --enable-default-pie  \
    --enable-default-ssp  \
    --enable-host-pie     \
    --disable-fixincludes
make -j$(nproc)
make install

解决步骤

要让编译完成的GCC默认优先使用自身的libstdc++.so,只需在configure阶段添加指定RPATH的参数,具体修改如下:

  1. 在configure命令末尾添加--with-rpath='$ORIGIN/../lib64'(用单引号包裹,避免shell提前解析$ORIGIN变量),也可以使用绝对路径形式--with-rpath=${HOME}/toolchains/gcc/lib64。

修改后的configure片段如下:

$PWD/../gcc-${gcc_version}/configure \
    --prefix=$HOME/toolchains/gcc \
    --enable-languages=c,c++ \
    --program-suffix=-${gcc_version}\
    --disable-multilib    \
    --with-system-zlib    \
    --enable-default-pie  \
    --enable-default-ssp  \
    --enable-host-pie     \
    --disable-fixincludes \
    --with-rpath='$ORIGIN/../lib64'
  1. 删除原有的gcc-${gcc_version}-build目录,重新创建并依次执行configure、make、make install命令。

  2. 验证效果:使用新编译的g++再次执行g++ -print-file-name=libstdc++.so,此时应返回自定义路径下的文件:

/home/user/toolchains/gcc/lib64/libstdc++.so

如果只是临时测试,也可以在运行g++前设置环境变量:export LD_LIBRARY_PATH=/home/user/toolchains/gcc/lib64,但上述configure参数是永久生效的方案,无需每次手动设置环境变量。

内容的提问来源于stack exchange,提问作者glades

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:15:03