| 查看: 2847 | 回复: 37 | |||
| 当前主题已经存档。 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
maomao1210金虫 (正式写手)
|
[交流]
【讨论】编译器,数学库安装。 已有1人参与
|
||
|
经常遇到编译器的安装,以及各种数学库的安装,还有一些常用软件的安装,最基本的能力。呵呵 如果能有个高手把这个总结一下的话,岂不是很好?让大家都来学习一下。 编译器:pgi, ifort,等等 数学库: blas, lapack, atlas, mkl 等等 常用软件就很多了,分子轨道理论方面的,密度泛函方面的,呵呵 希望能有高手给总结一下。让我们都来学习操作操作。 可惜我是一个linux盲,所以只能在这里呼吁了。呵呵。 为了此个项目,我决定拿出我全部的金币做为资助。 pgi 的安装过程,100 金币 ifort 的安装过程,100金币 mpich 的安装过程,100金币 blas+lapack的安装过程,160金币 atlas的安装过程,100金币 mkl的安装过程,100金币 共660金币。 呵呵。总结后,大家都可以来学习一下。 金币就这么多了,所以常用软件的安装就没有金币贡献了,呵呵,等赚了钱再继续来求贤,呵呵。 [ Last edited by maomao1210 on 2010-1-28 at 10:45 ] |
» 猜你喜欢
求助:我三月中下旬出站,青基依托单位怎么办?
已经有9人回复
Cas 72-43-5需要30g,定制合成,能接单的留言
已经有8人回复
北京211副教授,35岁,想重新出发,去国外做博后,怎么样?
已经有8人回复
磺酰氟产物,毕不了业了!
已经有5人回复
论文终于录用啦!满足毕业条件了
已经有25人回复
2026年机械制造与材料应用国际会议 (ICMMMA 2026)
已经有3人回复
自荐读博
已经有3人回复
不自信的我
已经有5人回复
投稿Elsevier的杂志(返修),总是在选择OA和subscription界面被踢皮球
已经有8人回复
» 本主题相关商家推荐: (我也要在这里推广)
zyz1981
至尊木虫 (文坛精英)
医学物理
- 应助: 1 (幼儿园)
- 贵宾: 1.976
- 金币: 16749.1
- 散金: 305
- 红花: 50
- 沙发: 17
- 帖子: 19496
- 在线: 761.5小时
- 虫号: 828345
- 注册: 2009-08-15
- 性别: GG
- 专业: 肿瘤物理治疗
PGI安装问题汇总
|
PGI安装问题集锦 PGI是Portland公司开发的编译器,可以编译高性能的fortran(77、9X)、C、C++,尤其是对AMD CPU优化非常好。这里汇总了安装过程中最常见的问题以及解决方案。 一、bash环境设置 相关问题:安装成功后,运行pgf90等命令显示“bash: pgf90: command not found”。 解决:在.bashrc或者.bash_profile中设置环境,做法如下(以我安装pgi6.0为例) cd ~ vim .bashrc 然后在最后追加 PATH=/usr/pgi/linux86/6.0/bin:$PATH export PATH MANPATH=$MANPATH:/usr/pgi/linux86/6.0/man export MANPATH LM_LICENSE_FILE=/usr/pgi/license.dat export LM_LICENSE_FILE export PGI=/usr/pgi 保存退出 然后source .bashrc 可以使用了。 二、glibc、crtbegin.o问题 问题:受系统安装的gcc编译器版本的影响,安装pgi有时候会遇到,例如我在安装pgi6.0-5时出现 ERROR: unknown glibc version (2.4),或者还有朋友遇到安装完毕后用pgf90编译fortran程序提示找不到crtbegin.o文件,这属于同一问题。 实际上pgi各模块已经写在硬盘上了,但是环境没设置好,所以还是不能工作。 具体原因: 由于安装文件中的makelocalrc不能正确生成localrc,所以pgi不能正常工作,这与使用哪个发行版无关. 解决方案: 以我的系统为例,我用ubuntu edgy,安装pgi 6.0 1.手动编写一个文本文件localrc,放在/usr/pgi/linux86/6.0/bin目录下 set LFC=-lg2c; set LDSO=/lib/ld-linux.so.2; set GCCDIR=/usr/lib/gcc/i486-linux-gnu/4.1.2; set GCCINC=; set G77DIR=/usr/lib/gcc/i486-linux-gnu/3.4.6/; set LOCALRC=YES; set THROW=__THROW=; set HAMMER=; set X86_64=; 这一方案简单有效 2.用如下文件替换安装目录中的makelocalrc文件,然后重新安装(该文件需要设置为可执行) (忘了抄的哪位高手的) 主要在66,267行附近,314行附近的改动是为了解决安装错误 : /usr/pgi/linux86/6.1/bin/makelocalrc: line 315: =安装: / u sr/l ib/gcc/i386-re dhat- linux/4.1.0/: 没有那个文件或目 录. 修改后的makelocalrc如下(修改部分已用整行长注释条标出): #! /bin/sh ## ## Copyright 1990-2000, The Portland Group, Incorporated. ## Copyright 2000-2005, STMicroelectronics, Incorporated. ## All rights reserved. ## ## STMICROELECTRONICS, INCORPORATED PROPRIETARY INFORMATION ## This software is supplied under the terms of a license agreement ## or nondisclosure agreement with STMicroelectronics and may not be ## copied or disclosed except in accordance with the terms of that ## agreement. ## # Just in case PATH=/usr/bin:/bin:$PATH TMPDIR=${TMPDIR:-/tmp} usage() { echo "Usage: $0 [-x|-n] installdir" echo echo "Example: $0 -x /usr/pgi/linux86/6.1" quit 1 } quit() { # Cleanup scratch files. rm -rf $scratch exit $1 } copy_files() { # $1 is source dir, $2 is destination dir if test -n "$1"; then if test -d "$1"; then if test ! -d $2 ; then mkdir $2 fi ( cd $1 ; tar cf - * | ( cd $2; tar xpf - )) fi fi } pretty_print() { echo $@ | awk -F^ '{printf("%20-s %s\n",$1,$2);}' } print_line() { echo $1 $2 $3 $4 $5 $6 >> $newrc } get_glibc_version() { # Determine the GNU LIBC version. if test -r /lib64/libc.so.6 ; then LIBC=/lib64/libc.so.6 # should only exist on a 64-bit Linux OS. elif test -r /lib/libc.so.6 ; then LIBC=/lib/libc.so.6 # should exist on any Linux OS. else echo "ERROR: /lib/libc.so.6: not found or no read permission" quit fi x=`strings $LIBC | grep 'GNU C Library' | cut -d, -f1 | awk '{print $7}'` if test -n "$x" ; then ######################################################################################### GLIBC_VERSION=2.4.4 ##原来是"$x" else GLIBC_VERSION=2.4.4 ##原来是空的 ######################################################################################## fi unset x return } get_linker_version() { x=`grep collect2 $out | sed q | sed -e 's/.* -dynamic-linker //' -e 's/ .*//'` if test -n "$x" ; then LINKER=$x else LINKER= fi unset x return } get_specs_file() { # This command pipeline should be I18N-capable. x=`awk '/gcc.*specs/ {print $NF}' $out` if test -n "$x" ; then SPECSFILE=$x else SPECSFILE= fi unset x return } # Stop if not Linux. opsys=`uname -s | tr '[A-Z]' '[a-z]'` if test "$opsys" != "linux" ; then echo echo "$0: `uname -n` is not running Linux" quit 1 fi pgi50=1 noexec=1 ofile=0 use_pthreads=1 no_m32_support=0 check_crt_files=0 set_hammer_empty=0 gcc=gcc g77=g77 scratch=$TMPDIR/PGI-INSTALL.$$ if test ! -d $scratch ; then mkdir $scratch fi while test -n "$1"; do case $1 in -n ) noexec=1 ;; -x ) noexec=0 ;; -o ) ofile=1 ; noexec=0 ;; -gcc ) shift; gcc=$1 ;; -g77 ) shift; g77=$1 ;; * ) start=$1 ;; esac shift done if test -z "$start" ; then usage fi if test ! -d $start ; then echo "$0: $start: directory not found" usage fi if test "$start" = "." ; then start=`pwd` fi if test "$pgi50" -eq 1 ; then # Example: 5.0 and above: # start = /usr/pgi/linux86/5.0 # installdir = /usr/pgi/linux86 # version = 5.0 # base = /usr/pgi/linux86/5.0 # target = linux86 installdir=`dirname $start` version=`basename $start` base=$start target=`basename $installdir` else # Example: 4.1 and below: # start = /usr/pgi # installdir = /usr/pgi # base = /usr/pgi/linux # version = 5.0 # target = linux86 installdir=$start version=`cat $start/.release` base=$start/linux86 target="linux86" fi # Define target-specific options needed below. arch=`uname -m` case "${target}:${arch}" in linux86:x86_64 ) gccopt="-o $scratch/a.out -m32 -v" g77opt=$gccopt subdir="/32" check_crt_files=1 use_64bit_rcfiles=11 install_64_bit=0 lib=/lib usrlib=/usr/lib ;; linux86:* ) set_hammer_empty=1 gccopt="-o $scratch/a.out -v" g77opt=$gccopt use_64bit_rcfiles=10 install_64_bit=0 lib=/lib usrlib=/usr/lib ;; linux86-64:x86_64 ) gccopt="-o $scratch/a.out -v" g77opt=$gccopt lib=/lib64 usrlib=/usr/lib64 install_64_bit=1 use_64bit_rcfiles=0 ;; linux86-64:* ) echo "ERROR: target doesn't match architecture" exit 1 ;; esac localrc=$base/bin/localrc newrc=$scratch/localrc.$$ # Find the version of GLIBC used on this system so that the appropriate # files are copied from lib-linux86-g* to lib and/or liblf. LIBC=$lib/libc.so.6 if test ! -f $LIBC ; then echo "ERROR: file $LIBC: not found." quit 1 fi get_glibc_version # sets GLIBC_VERSION case "$GLIBC_VERSION" in 2.3.* ) glibc=232 LIB=$base/lib-linux86-g232 LIBLF=$LIB-lf INC=$base/include-g23 ;; 2.2.9* ) glibc=2293 LIB=$base/lib-linux86-g2293 LIBLF=$LIB-lf INC=$base/include-g222 ;; 2.2.5 ) glibc=225 LIB=$base/lib-linux86-g225 LIBLF=$LIB-lf INC=$base/include-g222 ;; 2.2.4 ) glibc=224 LIB=$base/lib-linux86-g224 LIBLF=$LIB-lf INC=$base/include-g222 ;; 2.2.2 ) glibc=222 LIB=$base/lib-linux86-g22 LIBLF=$LIB-lf INC=$base/include-g222 ;; 2.1.9* | 2.2*) glibc=22 LIB=$base/lib-linux86-g22 LIBLF=$LIB-lf INC=$base/include-g22 ;; 2.1.[23] ) glibc=212 LIB=$base/lib-linux86-g212 ;; 2.1.1 ) glibc=211 LIB=$base/lib-linux86-g211 ;; #################################################################################### 2.4.4) ##这都是加上的 其实只要改GLIBC_VERSION glibc=232 ##对应上面半括号中较新版本版本号即可 LIB=$base/lib-linux86-g232 LIBLF=$LIB-lf INC=$base/include-g23 ;; ##################################################################################### * ) echo "ERROR: unknown glibc version ($GLIBC_VERSION)." quit 1 ;; esac # PGI software needs some of the gcc libraries. Run gcc to determine # to determine which linker and libraries are actually being used. type $gcc > /dev/null 2>&1 if test $? -eq 1 ; then echo "ERROR: gcc not found;" echo " successful use of compilers requires existence of gcc libraries" quit 1 fi cfile=$scratch/hello-$$.c ffile=$scratch/hello-$$.f cat > $cfile < #include main(){ printf("Hello world!\n" ; exit(0); }EOF_HELLO_C cat > $ffile < write(*,100) 100 format('Hello world!') end EOF_HELLO_F out=$scratch/gccrun.$$ $gcc $gccopt $cfile > $out 2>&1 if test ! -s $out ; then echo "ERROR: gcc failed to execute for reasons unknown." quit 1 fi ######################################################################## ####$gccbase=`$gcc -print-search-dirs | sed -e 's/^install: //' -e 1q` ####if test -d $gccbase$subdir ; then #### GCCDIR="$gccbase$subdir" ##原有的 ####fi ####gccversion=`$gcc -dumpversion` ####################################################################### libgcc=`$gcc -print-libgcc-file-name` gccbase=`dirname $libgcc` GCCDIR="$gccbase$subdir" ##自己加的 gccversion=`basename $gccbase` ########################################################################## # Check and see whether directory that gcc claims to exist actually # does exist. if test ! -d $gccbase ; then echo "ERROR: directory $gccbase: not found;" echo " successful use of compilers requires existence of gcc libraries!" quit 1 fi if test -d ${gccbase}include ; then GCCINC=${gccbase}include else unset GCCINC fi # Find the linker get_linker_version # returns LINKER if test ! -x $LINKER ; then echo "ERROR: Linker $LINKER: not found" quit 1 fi # Which g77? PGI software needs the g77 libraries, so look for the g77 libs. type $g77 >/dev/null 2>&1 if test $? -eq 1 ; then echo "WARNING: g77 not found; this may cause problems during use" G77DIR='""' else out=$scratch/g77run.$$ $g77 $g77opt $ffile > $out 2>&1 libgcc=`$g77 -print-libgcc-file-name` g77base=`$g77 -print-search-dirs | sed -e 's/^install: //' -e 1q` if test -d $g77base$subdir ; then G77DIR="$g77base$subdir" else G77DIR='""' fi f2c=`cat $out | grep lf2c` g2c=`cat $out | grep lg2c` if test -n "$f2c" ; then G77LIB="-lf2c" fi if test -n "$g2c" ; then G77LIB="-lg2c" fi fi if test -n "$G77LIB" ; then print_line "set LFC=$G77LIB;" fi # Which dynamic linker? if test "$LINKER" != "/lib/ld-linux.so.1" ; then print_line "set LDSO=$LINKER;" fi # CDK uses its own libmpich.a. if test -f "$base/bin/mpirun" ; then print_line "set MPILIB=$base/lib;" MPILIB=$base/lib/libmpich.a fi print_line "set GCCDIR=$GCCDIR;" print_line "set GCCINC=$GCCINC;" print_line "set G77DIR=$G77DIR;" #Add setaff_bind.o and -lnuma at link line x=$base x=`echo $x | sed -e 's/.*86-64.*/86-64/'` if test "$x" = "86-64" ; then if test -e $usrlib/libnuma.so ; then print_line 'set NUMAOBJS=$COMPLIBOBJ/setaff_bind.o;' print_line "set NUMALIBS=-lnuma;" fi fi if test $pgi50 -eq 0 ; then print_line "set STDRPATH=-rpath \$PGI/linux86/lib;" fi print_line 'set LOCALRC=YES;' if test "$noexec" -eq 1 ; then pretty_print 'PGI directory' ^ $installdir pretty_print 'PGI version' ^ $version pretty_print 'PATH entry' ^ "$base/bin" pretty_print 'System linker' ^ $LINKER pretty_print 'GCC directory' ^ $GCCDIR pretty_print 'GCC headers' ^ $GCCINC pretty_print 'G77 directory' ^ $G77DIR pretty_print 'G77 headers' ^ $G77LIB if test -n "$GLIBC_VERSION" ; then pretty_print 'GNU C version' ^ $GLIBC_VERSION pretty_print 'PGI glibc libs' ^ $LIB pretty_print 'PGI glibc headers' ^ $INC else pretty_print 'Glibc version' ^ 'no' fi if test -n "$LIBLF" ; then pretty_print 'Large file support' ^ $LIBLF else pretty_print 'Large file support' ^ 'no' fi if test -n "$MPILIB" ; then pretty_print 'MPILIB' ^ $MPILIB fi if test $use_pthreads -eq 1 ; then pretty_print 'Threads' ^ "$usrlib/libpthread.{a,so}" else pretty_print 'Threads' ^ "$base/lib/libpgthread.{a,so}" fi if test $no_m32_support -eq 1 ; then pretty_print 'gcc supports -m32' ^ 'no' else pretty_print 'gcc supports -m32' ^ 'yes' fi quit 0 fi # Make the necessary changes to meet glibc dependencies. if test -n "$glibc" ; then copy_files $LIB $base/lib case "$glibc" in 22* | 23* ) copy_files $INC $base/include print_line "set THROW=__THROW=;" ;; 21* ) ;; esac # Large file support. if test -n "$LIBLF" ; then copy_files $LIBLF $base/liblf else rm -rf $base/liblf fi # Newer distributions of Linux do not need PGI-compiled versions of # threads libraries. if test $use_pthreads -eq 1 ; then # Only create a symlink if the target file exists and # the link does not. if test -e $usrlib/libpthread.a ; then if test ! -h $base/lib/libpgthread.a ; then ln -s $usrlib/libpthread.a $base/lib/libpgthread.a fi fi if test -e $lib/libpthread.so.0 ; then if test ! -h $base/lib/libpgthread.so ; then ln -s $lib/libpthread.so.0 $base/lib/libpgthread.so fi fi fi # Adjust header files based on the gcc version. need_stddef=1 case "$gccversion" in 3.3* ) copy_files $base/include-gcc33 $base/include ;; 3.4* ) copy_files $base/include-gcc34 $base/include need_stddef=0 ;; 4.* ) copy_files $base/include-gcc40 $base/include need_stddef=1 ;; * ) ;; esac if test $need_stddef -eq 0 ; then rm -f $base/include/stddef.h fi # Changes for 32-bit installs. if test $set_hammer_empty -eq 1 ; then print_line "set HAMMER=;" print_line "set X86_64=;" fi if test $install_64_bit -eq 0 ; then if test -f /etc/redhat-release ; then grep 'release 9' /etc/redhat-release > /dev/null 2>&1 if test $? -eq 0; then print_line "set LBSTAT=-lpthread -lpthread_nonshared;" fi fi fi # Stock distributions may need extra help in finding crt files. if test $check_crt_files -eq 1 ; then if test ! -f /usr/lib64/32/crt1.o ; then print_line "set DEFLIBDIR=/usr/lib;" print_line "set DEFSTDOBJDIR=/usr/lib;" print_line "set EXTRAASARGS=--32;" fi fi # For production installations, recover some space by unneeded files. if test "$version" != "dev" ; then rm -rf $base/include-g* echo $GLIBC_VERSION > $base/glibc_version fi # Fix the 32/64-bit .*rc files. if test $use_64bit_rcfiles -eq 11 ; then files=`ls -1 $base/bin/.pg*-64 2>/dev/null` for i in $files ; do x=`echo $i | sed -e 's/-64$//'` mv -f $i $x done rm -f $base/bin/.pg*-32 > /dev/null 2>&1 elif test $use_64bit_rcfiles -eq 10; then files=`ls -1 $base/bin/.pg*-32 2>/dev/null` for i in $files ; do x=`echo $i | sed -e 's/-32$//'` mv -f $i $x done rm -f $base/bin/.pg*-64 > /dev/null 2>&1 fi fi # Add timestamp and username. print_line '# makelocalrc executed by ' `whoami` `date` # If $ofile is set, then display the file to stdout. Otherwise, write # it to $localrc. if test $ofile -eq 1 ; then echo "##### localrc contents #####" cat $newrc echo "############################" rm -f $newrc else if test -f $localrc ; then mv -f $localrc $localrc.bak chmod -f 0644 $localrc.bak fi mv -f $newrc $localrc chmod -f 0644 $localrc fi # Copy omp_lib.mod from lib directory to include directory echo if test -f $base/lib/omp_lib.mod ; then cp -f $base/lib/omp_lib.mod $base/include/omp_lib.mod fi if test -f $base/lib/omp_lib_kinds.mod ; then cp -f $base/lib/omp_lib_kinds.mod $base/include/omp_lib_kinds.mod fi quit 0 (过程中注意:找到软件包中的makelocalrc文件(linux86/bin下),用新的文件替换,同时应该增加makelocalrc可执行权限:chmod +x makelocalrc,很明显,无此步骤照样不成功) 转自:http://quantumv.blog.sohu.com/23690256.html |
17楼2010-01-29 14:08:01
亲核取代
铁杆木虫 (知名作家)
- 应助: 13 (小学生)
- 贵宾: 0.761
- 金币: 13239.4
- 散金: 3309
- 红花: 17
- 沙发: 130
- 帖子: 9414
- 在线: 2968.1小时
- 虫号: 462242
- 注册: 2007-11-19
- 性别: GG
- 专业: 催化化学
2楼2010-01-28 11:48:04
maomao1210
金虫 (正式写手)
- 程序强帖: 5
- 应助: 2 (幼儿园)
- 金币: 1431.3
- 散金: 242
- 红花: 16
- 沙发: 1
- 帖子: 991
- 在线: 441.5小时
- 虫号: 253215
- 注册: 2006-05-20
- 性别: MM
- 专业: 考古理论
3楼2010-01-28 13:41:45
mao_yijian
铁杆木虫 (著名写手)
- 应助: 0 (幼儿园)
- 金币: 6747.2
- 红花: 1
- 帖子: 2683
- 在线: 132.3小时
- 虫号: 810764
- 注册: 2009-07-17
- 性别: GG
- 专业: 检验医学其他科学问题

4楼2010-01-28 13:46:58









回复此楼
; exit(0); }
