由于 GCC 和 Ubuntu 的多个版本,我遇到了安装 GCC 所必需的几个头文件和目标文件的路径和命名问题。
描述:在安装 ubuntu(例如在我的情况下为 12.04)并安装 gcc 的所有先决条件后,我运行以下命令:
sudo mkdir /usr/local/stow/gcc-4.8.0
./configure --prefix /usr/local/stow/gcc-4.8.0
make
sudo make install
为了完整起见,安装过程的其余部分:
cd /usr/local/stow
sudo stow -t /usr/local/ gcc-4.8.0
gcc -v
但是,这种简单而正确的安装 gcc 的方法在“制作”步骤中存在一些问题,并显示以下错误消息:
1.) 'stubs.h' 的问题
/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory
这可以通过添加到 ~/.bashrc 的以下命令来修复:
if [ -z "$CPATH"]; then
export CPATH="/usr/include/i386-linux-gnu"
else
export CPATH=$CPATH:"/usr/include/i386-linux-gnu"
fi
2.) 'crti.o'、'crtn.o' 和 'crt1.o' 的问题
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find crtn.o: No such file or directory
/usr/bin/ld: cannot find crt1.o: No such file or directory
这可以用非常丑陋的解决方案来解决:
sudo ln -s /usr/lib/i386-linux-gnu/crti.o /usr/lib/i386-linux-gnu/crtn.o /usr/lib/i386-linux-gnu/crt1.o /usr/lib
因为 - 我不知道为什么 - 以下命令在“sudo make install”的链接步骤中不能解决问题
if [ -z "$LIBRARY_PATH"]; then
export LIBRARY_PATH="/usr/lib/${multiarch}"
else
export LIBRARY_PATH=$LIBRARY_PATH:"/usr/lib/${multiarch}"
fi
if [ -z "$LD_LIBRARY_PATH"]; then
export LD_LIBRARY_PATH="/usr/lib/${multiarch}"
else
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/usr/lib/${multiarch}"
fi
(使用这些解决方案,我可以在 Ubuntu 12.04 上编译 GCC-4.7.2。 - 我在 Ubuntu 12.04 上编译 GCC-4.8.0 时仍然遇到问题,但这是不同的主题。)
我的问题是:有人知道我们遇到这些问题的原因/背景吗?有人知道合适的解决方案吗?(对于“适当的解决方案”,我的意思是一种不需要设置环境变量或将符号链接库链接到不同目录的解决方案。对我来说,这些更改很难看,因为它们需要对系统进行更改,而这些更改可能无法追溯或重做。)