我正试图在x86_64 RHEL计算机(CentOS 6.4)上编译带有Intel CilkPlus(v4.9)模块的GCC编译器,用于编译针对并行多核平台的应用程序。
我遵循GNU GCC文档进行安装,这与带有CilkPlus扩展的GCC非常相似。我特别关注前面提到的文档中的先决条件和配置部分。
1) 下载
我确实按照说明页面中的指定使用此快照下载了我需要的所有内容。下载成功,也取消了tar。我确实将文件夹重命名为cilkplus-gcc
,并将其放在我的$HOME
目录下。
我还创建了另一个目录:$HOME/b-gcc
,我打算在其中运行configure
命令,然后运行make
命令。这将防止安装到同一目录中(这是该过程不希望的,因为它鼓励在不同的目录上构建所有内容)。
2) 初始配置
如文档中所述,我进入了$HOME/cilkplus-gcc/contrib
目录,以便构建安装过程(即:编译GCC)所需的三个最重要的库:
- GMP:位于
$HOME/cilkplus-gcc/contrib/gmp-4.3.2
目录中 - MPFR:位于
$HOME/cilkplus-gcc/contrib/mpfr-2.4.2
目录中 - MPC:位于
$HOME/cilkplus-gcc/contrib/mpc-0.8.1
目录中
我按照出现的顺序构建它们,因为MPFR取决于GMP,MPC同时取决于GMP和MPFR。我想把所有需要的文件都放在$HOME/cilkplus-gcc
目录中,所以我指示这些库的安装程序把所有文件都放到$HOME/cilkplus-gcc/contrib/tmp
目录中。因此:
sudo $HOME/cilkplus-gcc/contrib/gmp-4.3.2/configure --enable-shared --enable-static --prefix=$HOME/cilkplus-gcc/contrib/tmp
sudo $HOME/cilkplus-gcc/contrib/mpfr-2.4.2/configure --enable-shared --enable-static --prefix=$HOME/cilkplus-gcc/contrib/tmp --with-gmp=$HOME/cilkplus-gcc/contrib/tmp
sudo $HOME/cilkplus-gcc/contrib/mpc-0.8.1/configure --enable-shared --enable-static --prefix=$HOME/cilkplus-gcc/contrib/tmp --with-gmp=$HOME/cilkplus-gcc/contrib/tmp --with-mpfr=$HOME/cilkplus-gcc/contrib/tmp
直接的结果是,我的$HOME/cilkplus-gcc/contrib/tmp
目录中充满了目录lib
、include
、share
和bin
,其中包含这三个库。
3) 安装
是时候忙于编译所有内容了。我进入$HOME/b-gcc
目录,然后从那里发出以下命令:
sudo $HOME/cilkplus-gcc/configure --prefix=$HOME/cilkplus-install --enable-languages="c,c++" --with-gmp=$HOME/cilkplus-gcc/contrib/tmp/ --with-mpfr=$HOME/cilkplus-gcc/contrib/tmp/ --with-mpc=$HOME/cilkplus-gcc/contrib/tmp/
配置进行得很顺利,并将make内容创建到我当前的文件夹($HOME/b-gcc
)中。是时候制作和发布了:sudo make
。
两分钟后我收到这个错误
g++-c-g-DIN_GCC-fno异常-fno rtti-fasynchronous展开表-W-Wall-Wwrite字符串-Wcast qual-fno common-DHAVE_CONFIG_H-I-Ic家族-I/home/andry/cilkplus-gcc/gcc-I/home-andry/cilklus-gcc/gcc/c-famine-I/home·安dry/cickplus-gcc/gcc//include-I/home/andry/cilkplus-gcc/gcc//libcpp/include-I/home/andry/cilkplus gcc/contrib/tmp//include-I-home/andry/cilkplus gcc/contirb/tmp//include-I/home/andry/cilklus gcc/contrib/tmp//include-I/home/andry/cilkplus-gcc/gcc//libdecnumber-I/home/andry/cilkplus-gcc/gcc//libdecnumber/bid-I/libdecnumber-I/home/andry/cilkplus-gcc/gcc//libbacktrace/home/andry/cilkplus gcc/gcc/c-family/cppspec.c-oc-family/cppspec.o g++-g-DIN_GCC-fno异常-fno rtti-fasynchronous展开表-W-Wall-Wwrite字符串-Wcast qual-Wmissing格式属性-pedantic-Wno long-Wno可变宏-Wno超长字符串-fno common-DHAVE_CONFIG_H-o cpp gcc.o ggc none.o\c-ffamily/cppspec.o driver-i386.o libcommon target.a\libcommon.a../libcpp/libcpp.a-liconv/libbacktrace/.libs/libbacktrace.a../libiberty/libiberty.a../libdecnumber/libdecnumber.a/home/andry/b-gcc//gcc/xgcc-B/home/andry/B-gcc//gcc/-dumpsecs>tmp-species/home/andry/b-gcc//gcc/xgcc:加载共享库时出错:libiconv.so.2:无法打开共享对象文件:没有这样的文件或directory make3:*[specs]错误127 make3:正在离开目录
/home/andry/b-gcc/gcc' make[2]: *** [all-stage1-gcc] Error 2 make[2]: Leaving directory
/home/andry/b-gcc'make1:*[sstage1 bubble]错误2 make1:正在离开目录`/主页/andry/b-gcc'
但我检查了我的/usr/local/lib
文件夹,我可以清楚地看到libiconv.so.2
在那里!因此,我理解安装过程(即GCC编译本身)找不到库(我可以清楚地看到-liconv
标志)。所以我删除了$HOME/b-gcc
中的所有内容,并发布了一个修改后的configure
命令:
sudo $HOME/cilkplus-gcc/configure --prefix=$HOME/cilkplus-install --enable-languages="c,c++" --with-gmp=$HOME/cilkplus-gcc/contrib/tmp/ --with-mpfr=$HOME/cilkplus-gcc/contrib/tmp/ --with-mpc=$HOME/cilkplus-gcc/contrib/tmp/ --with-stage1-ldflags=-L/usr/local/lib
当我再次发出sudo make
时,不再遇到以前的错误,时间也就过去了。5/6分钟后,我得到这个错误:
正在检查x86_64-unknown-linux-gnu-ar。。。ar检查x86_64-unknown-linux-gnu-lipo。。。脂检查x86_64-unknown-linux-gnu-nm/home/andry/b-gcc//gcc/nm检查对于x86_64-unknown-linux-gnu-ranlib。。。ranlib检查x86_64-unknown-linux-gnu-strip。。。条带检查是否为ln-s作品是,正在检查x86_64-unknown-linux-gnu-gcc。。。/home/andry/b-gcc//gcc/xgcc-B/home/andry/B-gcc//gcc/-B/home/andry/cilkplus-install/x86_64-unknown-linux-gnu/bin/-B/home/andry/cilkplus-ininstall/x86_64-unknown-linux-gnu/lib/-isystem/home/aandry/cilklus-install/x66_64-ununknown-linux-gnu/include-isystem/home/andry/cilkplus-install/x86_64-unknown-linux-gnu/sys include
正在检查对象文件的后缀。。。配置:错误:在有关更多详细信息,请参阅/home/andry/b-gcc/x86_64-unknown-linux-gnu/libgcc': configure: error: cannot compute suffix of object files: cannot compile See
配置日志。make2:*[configure-stage1-target-libgcc]错误1 make2:正在离开目录/home/andry/b-gcc' make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory
/home/andry/b-gcc'
嗯,这是一件很奇怪的事情。。。所以我检查了$HOME/b-gcc/x86_64-unknown-linux-gnu/libgcc/config.log
(将显示相关摘录):
-isystem/home/andry/cilkplus-install/x86_64-unknown-linux-gnu/sys include
-c-g-O2-conftest.c>&5/home/andry/b-gcc//gcc/cc1:加载共享库时出错:libmpc.so.2:无法打开共享对象文件:没有配置这样的文件或目录:3593:$?=1配置:失败程序是:|/*confdefs.h*/|#define PACKAGE_NAME"GNU C RuntimeLibrary"|#define PACKAGE_TARNAME"libgcc"|#fine PACKAGE_VERSION"1.0"|#define PACKAGE_STRING"GNU C运行库1.0"|#definePACKAGE_BUGREPORT"|#define PACKAGE_URL"http://www.gnu.org/software/libgcc/"|/*结束confdefs.h.*/||int|main()|{||;| return 0;|}配置:3607:错误:在有关更多详细信息,请参阅"/home/andry/b-gcc/x86_64-unknown-linux-gnu/libgcc': configure:3610: error: cannot compute suffix of object files: cannot compile See
配置日志"。
说错误基本上如下:
/home/andry/b-gcc//gcc/cc1:加载共享库时出错:libmpc.so.2:无法打开共享对象文件:没有这样的文件或目录
但我不是已经告诉它(在配置期间)去搜索libmpc.so.2
到$HOME/cilkplus-gcc/contrib/tmp
吗???
我怎样才能完成任务?
我该如何度过难关?谢谢
**
我从下载了cilkplus分支的快照http://gcc.gnu.org/git/?p=gcc.git;a=短对数;h=refs/heads/cilkplus-4_8-分支,然后单击签入列表顶行的快照链接。服务器将需要一些时间来获取源代码并构建一个压缩的tarfile。下载压缩的tarfile后,将其放入目录/home后,使用以下命令对其进行解压缩:
cd /home
tar -xf gcc-3cfca5e.tar.gz
这将创建一个目录gcc-3cfca5e下载最新的mpfr、mpc和gmp,并将这些tarball放入gcc-3fca5e目录中。
cd /home/gcc-3cfca5e
tar -jxvf mpfr-3.1.2.tar.bz2
tar -xzvf mpc-1.0.1.tar.gz
tar -vxjf gmp-5.1.3.tar.bz2
ln -sf mpfr-3.1.2 mpfr
ln -sf mpc-1.0.1 mpc
ln -sf gmp-5.1.3 gmp
cd /home
mkdir gcc-cilk-obj
mkdir gcc-cilk
cd /home/gcc-cilk-obj
../gcc-3cfca5e/configure --prefix=/home/gcc-cilk --disable-multilib -enable-languages=c
make
make install
============在VirtualBox 4中运行Slackware电流的核心2二人组上,花了大约4个小时制作(VBox设置>系统>处理器>检查启用PAE)Windows 7专业版。我的linux系统没有autogen,但它仍然可以工作。