LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1267|回复: 11

有人在FC5下安装了 PGI_workstation的嘛?

[复制链接]
发表于 2006-3-26 15:12:59 | 显示全部楼层 |阅读模式
问个问题~

安装好后,编译任何fortran文件都出现
pgf90-Error-file with unknown suffix ignored的错误

何解?
发表于 2006-3-26 16:07:08 | 显示全部楼层
我的也装不了,主要原因是PGI不能识别glibc2.4.4的原因,你可以尝试修改它的安装脚本。
也可以改用intel的fortran编译器。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-26 17:11:50 | 显示全部楼层
以前一直在rh9,fc4里面用的好好的,哎~~~
回复 支持 反对

使用道具 举报

发表于 2006-3-27 00:22:21 | 显示全部楼层
localrc修改了没有,环境变量设置了吗?我在FC5 x86_64上编译运行都正常。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-27 10:08:31 | 显示全部楼层
makelocalrc说glibc是2.4的,不支持
回复 支持 反对

使用道具 举报

发表于 2006-3-27 12:17:20 | 显示全部楼层
Post by Mongon Halo
makelocalrc说glibc是2.4的,不支持

不能自动生成就自己编辑一个

x86_64的localrc:

set LDSO=/lib64/ld-linux-x86-64.so.2;
set GCCDIR=/usr/lib/gcc/x86_64-redhat-linux/4.1.0/;
set GCCINC=/usr/lib/gcc/x86_64-redhat-linux/4.1.0/include;
set G77DIR="";
set LOCALRC=YES;
set THROW=__THROW=;
# makelocalrc executed by root Sat Dec 9 16:33:33

i386的相应作修改, 关键是第二行和第三行的4.1.0不是4.0.2
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-27 12:25:33 | 显示全部楼层
原来自己改也可以啊啊啊啊,受教了,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-27 16:47:44 | 显示全部楼层
改完了还是不行啊,要哭了
回复 支持 反对

使用道具 举报

发表于 2006-6-1 21:03:14 | 显示全部楼层
FC5 中安装mplayer时 libdha 中的 kernelhelper编译不上导致gui播放时出现错误:libdha: DHA kernelhelper failed: 没有那个文件或目录
同时出错:
  No vidix driver name provided, probing available ones (-v option for details)!

只好用命令:cat  xxx.rmvb | mplayer  或  mplayer  文件名   播放
然后安装了totem  和 xine 感觉更好使
回复 支持 反对

使用道具 举报

发表于 2006-6-1 21:05:08 | 显示全部楼层
我在装了FC5后想转WRF,安装pgi6.1-4(以前用pgi6.0)出现  ERROR: unknown glibc version (2.4),
仔细检查发现是脚本安装文件makelocalrc的问题于系统无关. 于是修改makelocarc,主要在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:/binPATH
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 <<EOF_HELLO_C
#include <stdio.h>
#include <stdlib.h>
main(){ printf("Hello world!\n"); exit(0); }
EOF_HELLO_C

cat > $ffile <<EOF_HELLO_F
    program hello
    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
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表