我在构建 gcc-4.8.2 时遇到了同样的问题。我在那台机器上没有 root 访问权限,因此需要安装到我的主目录。在我想出让它工作所需的魔力之前,我花了几次尝试,所以我将在这里复制它,这样其他人会更轻松。这些是我用来配置 gcc 的命令:
prefix=/user/grc/packages
export LDFLAGS=-Wl,-rpath,$prefix/lib
export LD_RUN_PATH=$prefix/lib
export LD_LIBRARY_PATH=$prefix/lib
../../src/gmp-4.3.2/configure --prefix=$prefix
../../src/mpfr-2.4.2/configure --prefix=$prefix
../../src/mpc-0.8.1/configure --prefix=$prefix --with-mpfr=$prefix --with-gmp=$prefix
../../src/gcc-4.8.2/configure --prefix=$prefix --with-mpfr=$prefix --with-gmp=$prefix --with-mpc=$prefix --enable-languages=c,c++
这让我得到了一个可以工作的二进制文件,但是我用那个版本的 g++ 构建的任何程序都无法正确运行,除非我使用 -Wl,-rpath,$prefix/lib64 选项构建它。可以通过提供规范文件让 g++ 自动添加该选项。如果你跑
strace g++ 2>&1 | grep specs
您可以查看它检查哪些目录以查找规范文件。就我而言,它是 $prefix/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/specs 所以我运行 g++ -dumpspecs 来创建一个新的规范文件:
cd $prefix/lib/gcc/x86_64-unknown-linux-gnu/4.8.2
$prefix/bin/g++ -dumpspecs > xx
mv xx specs
然后编辑该文件以提供 -rpath 选项。搜索这样的行:
*link_libgcc:
%D
并编辑以添加 rpath 选项:
*link_libgcc:
%D -rpath /user/grc/packages/lib/%M
%M 扩展为 ../lib 或 ../lib64 取决于您构建的是 32 位还是 64 位可执行文件。
请注意,当我在较旧的 gcc-4.7 构建上尝试相同的技巧时,它不起作用,因为它没有扩展 %M。对于旧版本,您可以删除 %M 并仅对 lib 或 lib64 进行硬编码,但这只有在您仅构建 32 位可执行文件(使用 lib)或仅构建 64 位可执行文件(使用 lib64)时才是可行的解决方案。