由于安装了多个版本的 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 的简单而正确的方法在“make”步骤中出现了一些问题,并出现以下错误消息:
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 时仍然有问题,但这是不同的话题。)
我的问题是:有人知道我们遇到这些问题的原因/背景吗?有人知道合适的解决方案吗? (对于“正确的解决方案”,我的意思是不需要设置环境变量或符号链接(symbolic link)库到不同目录的解决方案。对我来说,这些变化是丑陋的,因为它们需要对系统进行更改,而这些更改可能无法追溯或重做。)
最佳答案
在 GCC 源的根文件夹中执行 ./contrib/download_prerequisites
脚本。
关于gcc - Ubuntu (12.10) 和 GCC 4.7/4.8 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907055/