我在 Ubuntu Hardy Heron 上尝试从源代码编译 gcc 4.4。问题是我需要 MPFR 版本 2.3.2 或更高版本。我有 MPFR 版本 2.3.1。我可以通过运行从他们获得的这段 C 代码小片段来验证这一点地点-:
#include <stdio.h>
#include <mpfr.h>
int main (void)
{
printf ("MPFR library: %-12s\nMPFR header: %s (based on %d.%d.%d)\n",
mpfr_get_version (), MPFR_VERSION_STRING, MPFR_VERSION_MAJOR,
MPFR_VERSION_MINOR, MPFR_VERSION_PATCHLEVEL);
return 0;
}
cc -o version version.c -lmpfr -lgmp
这打印出-:
MPFR library: 2.3.1
MPFR header: 2.3.2 (based on 2.3.2)
我已经从源代码下载并构建了 MPFR(版本 2.3.2),并且它已正确安装在 /usr/local 中,但问题是 gcc 默认情况下不会链接到它。我必须使用以下编译选项来链接到我的新 MPFR 库 -:
gcc test_mpfr.o -o test_mpfr -Wl,-Bstatic -l:/usr/local/lib/libmpfr.a -Wl,-Bdynamic
这会产生正确且预期的输出 -:
MPFR library: 2.3.2
MPFR header: 2.3.2 (based on 2.3.2)
现在我的问题是
首先,如何删除默认的 MPFR 安装从我的系统(apt-get --purge remove libmpfr-dev 不执行任何操作), 和
其次,如何将新的 MPFR 安装设置为默认安装,以便 gcc 可以自动链接到它。
答案1
删除系统 gcc、mpfr 不是一个好主意。请重新安装。 ( sudo apt-get install g++
) 并且:您可以同时安装任意多个 gcc 版本。 Hardy 的默认编译器:sudo apt-get install g++ g++-3.3 g++-3.4 g++-4.1
,,, 其中 g++ 是系统编译器 gcc/g++ 版本 4.2.4 。
编译器,gcc44、g++44 可用对于 Ubuntu 8.04 Hardy,例如 i386 : {gcc44_4.4.7-2_i386.deb,gcc44-c++_4.4.7-2_i386.deb,libstdc++44-devel_4.4.7-2_i386.deb} 。链接:
海湾合作委员会44https://drive.google.com/file/d/0B7S255p3kFXNYmpYeGZHS0RUR0U/view?usp=sharing gcc44-c++https://drive.google.com/file/d/0B7S255p3kFXNMEF1NWFiVFViMlk/view?usp=sharing libstdc++44-devhttps://drive.google.com/file/d/0B7S255p3kFXNWHB3ejd0TTNhUWc/view?usp=sharing
安装:下载三个包,然后...
1) sudo apt-get install libgmp3c2
cd Downloads/
2) sudo gdebi gcc44_4.4.7-2_i386.deb
3) sudo gdebi libstdc++44-devel_4.4.7-2_i386.deb
4) sudo gdebi gcc44-c++_4.4.7-2_i386.deb
注意:请告知,如果您的操作系统是 amd64/x86_64,并且可以上传 64 位包。
如果您确实想手动构建 gcc-4.4.7 :不需要外部 mpfr、gmp :
tar xvf gcc-4.4.7.tar.bz2 (A configured gcc cannot be reused, please start from scratch)
cd gcc-4.4.7/
tar xvf mpfr-2.4.2.tar.bz2
mv -v mpfr-2.4.2 mpfr
tar xvf gmp-5.0.0.tar.bz2
mv -v gmp-5.0.0 gmp
gcc 需要源代码之外的构建文件夹......
cd ../
mkdir build-gcc44
cd build-gcc44/
../gcc-4.4.7/configure --program-suffix=44 --prefix=/usr/local/gcc447 --enable-clocale=gnu --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-languages=c,c++ --disable-multilib
make
sudo make install
cd /usr/bin/
sudo ln -s /usr/local/gcc447/bin/gcc44
sudo ln -s /usr/local/gcc447/bin/g++44
使用额外的编译器,示例:
1) export CC=gcc44 CXX=g++44 && [other command]
Like : 2) export CC=gcc44 CXX=g++44 && ./configure
3) gcc44 file.c
答案2
我的操作系统是 x86_64
Packages.amd64 :g++44_4.4.7-ubuntu8_amd64.deb、gcc44_4-4-7-ubuntu8_amd64.deb、libstdc++44-dev_4.4.7-ubuntu8_amd64.deb,使用 $ 创建dpkg-deb -b
链接:gcc44https://drive.google.com/file/d/0B7S255p3kFXNQlVHeXdPc25sSEE/view?usp=sharing 克++44https://drive.google.com/file/d/0B7S255p3kFXNeU5jSG9ZdXNQQTQ/view?usp=sharing libstdc++44-devhttps://drive.google.com/file/d/0B7S255p3kFXNbWxGNEM0TG93LW8/view?usp=sharing
1) sudo gdebi libstdc++44-dev_4.4.7-ubuntu8_amd64.deb
2) sudo gdebi gcc44_4-4-7-ubuntu8_amd64.deb
3) sudo gdebi g++44_4.4.7-ubuntu8_amd64.deb
编译器在 Hardy 中使用约 150GB 的应用程序、数百个 c、c++ 文件进行了测试:结果 = OK。
构建 gcc4.4 需要 MPFR
当然。看我的帖子。 mpfr 在 gcc-4.4.7/ 内解压。
我如何验证它们未被篡改?
到目前为止,我多年来构建的许多软件包都还不错。没有任何用户的投诉。
今天的软件包是用 Ubuntu Hardy 的外星人命令处理的:节省了几分钟。而不是真正的重建......
$ dpkg-deb -b packagename packagename_version_architecture.deb
三个转换后的软件包来自 CentOS 5.11 存储库http://mirror.centos.org/centos/5.11/os/i386/CentOS/,即“企业质量”。
答案3
我有类似的问题,想要删除旧版本的 mpfr ( libmpfr4)。
解决方案
- sudo apt-get 删除 libmpfr4
- 从 usr/local/lib 手动删除旧库的符号链接