我正在尝试使用自定义前缀$PREFIX
来构建gcc 4.7.2。
我已经将所有的先决条件构建并安装到我的前缀位置,然后成功地配置、构建和安装了gcc。
现在我遇到的问题是$PREFIX
不在库搜索路径中,因此无法找到共享库。
$PREFIX/bin $ ./g++ ~/main.cpp
$PREFIX/libexec/gcc/x86_64-suse-linux/4.7.2/cc1plus: \
error while loading shared libraries: \
libcloog-isl.so.1: \
cannot open shared object file: No such file or directory
有用但不是理想的方法
如果我使用export LD_LIBRARY_PATH=$PREFIX/lib
,那么程序可以正常运行,但我希望有一种无需设置环境变量的方法。
如果我使用patchelf
来设置所有gcc
二进制文件的RPATH
,那么也可以正常工作;然而,这需要搜索所有Elf二进制文件并循环调用patchelf
,我希望有更永久的解决方案。
我认为最理想的解决方案
因此,我希望在构建过程中通过make传递-Wl,-rpath,$PREFIX/lib
。
既然我知道路径不需要更改,这似乎是最健壮的解决方案,并且也可以在构建下一个gcc版本时使用。
是否可以配置构建过程来硬编码RPATH
?
我尝试过但不起作用的方法
在调用configure
之前设置LDFLAGS_FOR_TARGET
:
所有这些方法都失败了:
export LDFLAGS_FOR_TARGET="-L$PREFIX/lib -R$PREFIX/lib"
export LDFLAGS_FOR_TARGET="-L$PREFIX/lib"
export LDFLAGS_FOR_TARGET="-L$PREFIX/lib -Wl,-rpath,$PREFIX/lib"
在调用
configure
之前设置LDFLAGS
:export LDFLAGS="-L$PREFIX/lib -Wl,-rpath,$PREFIX/lib"
无论如何,我担心这些将覆盖gcc本来会有的任何LDFLAGS
,所以即使它们能够正常工作,我也不确定它们是否是一个可行的选项?
我的配置命令
为了完整起见,这是我传递给配置的命令行:
./configure \
--prefix=$PREFIX \
--build=x86_64-suse-linux \
--with-pkgversion='SIG build 12/10/2012' \
--disable-multilib \
--enable-cloog-backend=isl \
--with-mpc=$PREFIX \
--with-mpfr=$PREFIX \
--with-gmp=$PREFIX \
--with-cloog=$PREFIX \
--with-ppl=$PREFIX \
--with-gxx-include-dir=$PREFIX/include/c++/4.7.2
LDFLAGS_FOR_TARGET
:这可能用于 libgcc.so 和 libstdc++.so,但不适用于编译器二进制文件,因为它们是 主机 二进制文件。我认为LDFLAGS
应该是正确的选择。 - ams