could not complete installation in UBUNTU

During the installation of PGI 7.1.1 on Ubuntu 8.04 (amd64) I got this message

Installing software into /opt/pgi (this may take some time).
######################

Unknown glibc version (2.7); treating like 2.4
ERROR: Linker : not found

Making symbolic links in /opt/pgi/linux86-64/7.1

After I got lmgrd running i used the command pgf90 -V x.f to check the installation but i got the message:
pgf90-Error-Please run makelocalrc to complete your installation
Using the command
/opt/pgi/linux86-64/7.1-1/bin/makelocalrc -x /opt/pgi/linux86-64/7.1-1
I got the first message again

Please help!
Thanks
George

Hi,

Can you please post what is in your /opt/pgi/linux86-64/7.1-1/bin/localrc ?
What is the output of gcc -v?

Hongyon

Hi,
The output of gcc -v is:

Using built-in specs.
Target: x86_64-linux-gnu
Configured with: …/src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)

The contents of the makelocalrc file are the following:


#! /bin/sh

Copyright 1990-2000, The Portland Group, Incorporated.

Copyright 2000-2006, 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.

makelocalrc

[installdir]

[-n|-x|-o]

[-network shared-directory]

[-gcc gcccommand]

[-g77 g77command]

[-l licensefile]

[-d outputdir]

Just in case, add /usr/bin and /bin to PATH

PATH=/usr/bin:/bin:$PATH
LANG=en_US.UTF-8

set TMPDIR if environment variable $TMPDIR is not set

TMPDIR=${TMPDIR:-/tmp}

Print usage information, then quit

usage() {
echo “Usage: $0 [installdir] [switches]…”
echo “installdir the directory where the PGI compilers are installed”
echo “-d outdir directory to put localrc; default is installdir”
echo “-n show the install information, do not write a localrc file”
echo “-o create the localrc file and write to stdout”
echo “-x write the localrc file and place in outputdir”
echo “-l lic flexlm license file to add to localrc”
echo “-gcc gcc gcc command name; default is gcc”
echo “-g77 g77 g77 command name; default is g77”
echo “-net locdir perform network install with named local directory”
echo
echo “Example: $0 -x /usr/pgi/linux86/7.0”
quit 1
}

Clean up scratch files and exit

quit() {
rm -rf “$scratch”
exit $1
}

Copy files using tar to preserve permissions and dates

$1 is source dir, $2 is destination dir

$1 may be in a relative path, $2 must be a full path

copy_files() {
if test -n “$1”; then
if test -d “$1”; then
if test ! -d $2 ; then
mkdir $2
fi
if test “$version” == “dev” -o “$version” == “mine” ; then
( cd $1 ; tar cf - * | ( cd $2; tar xpf - ))
else
( cd $1 ; tar chf - * | ( cd $2; tar xpf - ))
fi
fi
fi
}

Copy a single file using tar to preserve permissions and dates

$1 is source file, $2 is destination file

$1 may be in a relative path, $2 must be a full path

if $linkfiles is set, use symbolic links instead

linkfiles=
copy_one_file() {
if test -n “$1”; then
if test -f “$1”; then
b1=dirname $1
f1=basename $1
b2=dirname $2
f2=basename $2
if test ! -d $b2 ; then
mkdir $b2
else
rm -f $b2/$f2
fi
if test -n “$linkfiles” ; then
( cd $b1 ; b1=pwd ; cd $b2 ; ln -s $b1/$f1 $f2 )
else
( cd $b1 ; tar chf - $f1 | ( cd $b2; tar xpf - ))
( cd $b2 ; if test “$f1” != “$f2” ; then mv -f “$f1” “$f2” ; fi )
fi
fi
fi
}

Print with columns line up

pretty_print() {
echo $@ | awk -F^ ‘{printf("%20-s %s\n",$1,$2);}’
}

Print a line to the localrc file

print_line() {
echo $1 $2 $3 $4 $5 $6 >> $newrc
}

Determine the GNU LIBC version.

get_glibc_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=$x
else
GLIBC_VERSION=
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
}

recursively create a directory tree

builddir() {
local sdir
sdir="$1"
if test -d “$sdir” ; then
if test ! -w “$sdir” ; then
echo Directory “$sdir” is not writeable.
quit 1
fi
return
fi
pdir=dirname "$sdir"
if test “$pdir” = “$sdir” ; then
echo Cannot create topmost directory “$pdir”
quit 1
fi
builddir “$pdir”
mkdir “$sdir”
if test $? -ne 0 ; then
echo Could not make directory “$sdir”
quit 1
fi
}

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

noexec is set to not generate localrc

noexec=

ofile is set to print localrc to stdout

ofile=0

check_crt_files is set for a 64-bit install

when we have to check whether 32-bit is available

check_crt_files=0

set_hammer_empty is set for a 32-bit install, to set $HAMMER to empty

set_hammer_empty=0

gcc, g77, gfortran are names of gcc, g77, gfortran

gcc=gcc
g77=g77
gfortran=gfortran

start is the directory of the compilers being installed

default value is the directory containing this script

start=

license is name of flexlm license file, from command line

license=

network is set if this is a network install

locdir is the local directory

network=0
locdir=
locdirused=
locdir64used=

outputdir is directory into which to put rcfile

default is to put in bin directory(ies)

outputdir=

scratch is scratch directory

if test ! -d $TMPDIR ; then
echo Temporary directory $TMPDIR was not found.
echo Check the value of your environment variable TMPDIR.
quit 1
elif test ! -w $TMPDIR ; then
echo Temporary directory $TMPDIR is not writeable.
echo Check the value of your environment variable TMPDIR.
quit 1
fi
scratch=$TMPDIR/PGI-INSTALL.$$
if test ! -d “$scratch” ; then
mkdir “$scratch”
if test $? -ne 0 ; then
echo “Could not make scratch directory $scratch.”
echo “Check the value of your environment variable TMPDIR.”
quit 1
fi
fi

parse command line

while test -n “$1”; do # {
case “$1” in
-n ) noexec=1 ;;
-x ) noexec=0 ;;
-o ) ofile=1 ; noexec=0 ;;
-l ) shift; license="$1" ;;
-d ) shift; outputdir="$1" ;;
-net ) shift; locdir="$1"; network=1 ;;
-lnet) locdir= ; network=1 ;; # undocumented, internal testing only
-link) linkfiles=1 ;; # undocumented, internal testing only
-gcc ) shift; gcc="$1" ;;
-g77 ) shift; g77="$1" ;;

  • ) start="$1" ;;
    esac
    shift
    done # }

if test -z “$start” -a -z “$noexec” ; then

makelocalrc by itself isn’t enough

makelocalrc -x by itself uses makelocalrc directory as start

usage
fi
if test -z “$noexec” ; then

default is noexec

noexec=1
fi
if test -z “$start” ; then

default for ‘start’ is directory containing pginstall

start=dirname $0
fi

if test ! -d “$start” ; then
echo “$0: $start: directory not found”
usage
fi

if test “$start” = “.” ; then
start=pwd
fi

if test “$outputdir” = “.” ; then
outputdir=pwd
fi

resolve any relative directories for start, outputdir, license

cwd=pwd

cd “$start”
start=pwd
cd $cwd

in case $start is the bin directory, go to parent

startdir=basename "$start"
if test “$startdir” = “bin” ; then
start=dirname "$start"
fi

if test -n “$outputdir” ; then # {
if test ! -d "$outputdir "; then
echo “ERROR: output directory $outputdir not found”
quit 1
fi
cd “$outputdir”
outputdir=pwd
cd $cwd
else # }else{
if test -d “$start/“bin ; then
outputdir=”$start”/bin
else
echo “ERROR: output directory $start/bin not found”
quit 1
fi
fi # }

if test -n “$license” ; then # {
if test ! -f “$license” ; then
echo “$0: $license: file not found”
usage
fi
licensedir=dirname $license
licensefile=basename $license
if test ! -d “$licensedir” ; then
echo “ERROR: License file directory $licensedir not found”
quit 1
fi
cd $licensedir
licensedir=pwd
cd $cwd
license=$licensedir/$licensefile
fi # }

Example:

start = /usr/pgi/linux86/7.0

installdir = /usr/pgi/linux86

version = 7.0

base = /usr/pgi/linux86/7.0

target = linux86

base="$start"
installdir=dirname "$start"
version=basename "$start"
target=basename $installdir
pgidir=dirname $installdir

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
oem=“32-bit target on x86-64 Linux”
;;
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
oem=“32-bit target on x86 Linux”
;;
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
oem=“64-bit target on x86-64 Linux”
;;
linux86-64:* )
echo “ERROR: target doesn’t match architecture”
exit 1
;;
esac # }

if test $network -eq 0 ; then

localrc file name

localrcname=localrc
else

localrc.host file name

hostname=hostname -s
localrcname=localrc.$hostname
if test $noexec -eq 0 -a -n “$locdir” ; then

turn locdir into full path, if it isn’t

cd $cwd
cd $locdir
locdir=pwd
builddir “$locdir”
cd $cwd
fi
fi
localrc="$outputdir"/$localrcname
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, for normal

install, or the appropriate include and lib directories are put

on the include/lib path for network install.

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

These are in numerical order to catch newer versions at the end

case “$GLIBC_VERSION” in # {
0.* | 1.)
echo “ERROR: glibc version ($GLIBC_VERSION) is no longer supported.”
quit 1
;;
2.0.
)
echo “ERROR: glibc version ($GLIBC_VERSION) is no longer supported.”
quit 1
;;
2.1.[23] )
glibc=212
LIB=lib-linux86-g212
;;
2.1.9*)
glibc=22
LIB=lib-linux86-g22
LIBLF=$LIB-lf
INC=include-g22
;;
2.1.)
echo “ERROR: glibc version ($GLIBC_VERSION) is no longer supported.”
quit 1
;;
2.2.2 )
glibc=222
LIB=lib-linux86-g22
LIBLF=$LIB-lf
INC=include-g222
;;
2.2.4 )
glibc=224
LIB=lib-linux86-g224
LIBLF=$LIB-lf
INC=include-g222
;;
2.2.5 )
glibc=225
LIB=lib-linux86-g225
LIBLF=$LIB-lf
INC=include-g222
;;
2.2.9
)
glibc=2293
LIB=lib-linux86-g2293
LIBLF=$LIB-lf
INC=include-g2293
;;
2.2*)
glibc=22
LIB=lib-linux86-g22
LIBLF=$LIB-lf
INC=include-g22
;;
2.3.* )
glibc=232
LIB=lib-linux86-g232
LIBLF=$LIB-lf
INC=include-g23
;;
2.4* )
glibc=232
LIB=lib-linux86-g232
LIBLF=$LIB-lf
INC=include-g23
;;
2.5* )
glibc=232
LIB=lib-linux86-g232
LIBLF=$LIB-lf
INC=include-g23
;;
2.6* )
glibc=232
LIB=lib-linux86-g232
LIBLF=$LIB-lf
INC=include-g23
;;
2.* )
echo “Unknown glibc version ($GLIBC_VERSION); treating like 2.4”
glibc=232
LIB=lib-linux86-g232
LIBLF=$LIB-lf
INC=include-g23
;;

  • )
    echo “ERROR: unknown glibc version ($GLIBC_VERSION).”
    quit 1
    ;;
    esac # }

cd “$start”
if test ! -d “$LIB” ; then
LIB=
fi
if test ! -d “$LIBLF” ; then
LIBLF=
fi
if test ! -d “$INC” ; then
INC=
fi

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 's/\/$//' -e 1q
if test -d “$gccbase”$subdir ; then
GCCDIR="$gccbase$subdir"
fi
gccversion="$gcc" -dumpversion

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 or the gfortran libraries,

so look for the g77 libs.

which “$g77” >/dev/null 2>&1
if test $? -eq 1 ; then # {
G77DIR=’""’
else # }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 # }

Which gfortran? Look for the gfortran libs.

if test $G77DIR == ‘""’ ; then # {
which “$gfortran” >/dev/null 2>&1
if test $? -eq 1 ; then
G77DIR=’""’
else
out="$scratch"/g77run.$$
“$gfortran” $g77opt “$ffile” > “$out” 2>&1
libgcc="$gfortran" -print-libgcc-file-name
g77base="$gfortran" -print-search-dirs | sed -e 's/^install: //' -e 1q
if test -d “$g77base”$subdir ; then
G77DIR="$g77base$subdir"
else
G77DIR=’""’
fi
g2c=cat "$out" | grep lgfortran
if test -n “$g2c” ; then
G77LIB="-lgfortran"
fi
fi
fi # }

if test -n “$G77LIB” ; then
print_line “set LFC=$G77LIB;”
fi

Which dynamic linker?

print_line “set LDSO=$LINKER;”

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;”
print_line “set OEM_INFO=$oem $INFOTPVAL;”

has_sched_setaffinity=0

x="$base"
x=echo "$x" | sed -e 's/.*86-64.*/86-64/'
if test “$x” = “86-64” ; then
libso=libso
setaff_m32=
else
libso=lib
setaff_m32=’-m32’
fi

Make symlink libpgnuma.so to system libnuma.so?

syslibnuma=0
if test -e $usrlib/libnuma.so ; then
print_line “set NUMALIBS=-lnuma ;”
syslibnuma=1
fi

test whether sched_setaffinity exists and works here

sfile="$scratch"/sched-$$.c
sofile="$scratch"/sched-out
gccsopt="$setaff_m32 -o $sofile"
out="$scratch"/sched.$$
cat > “$sfile” <<EOF_SCHED_C
#include <sched.h>
extern void exit(int);
extern void perror(const char*);
extern int getpid(void);
static void
_mp_bind(int lcpu)
{
long mask;
mask = 1<<lcpu;
if(sched_setaffinity(getpid(),sizeof(mask),&mask)==-1){
perror(“init_pthr: sched_setaffinity”);
exit(1);
}
}
int
main()
{
_mp_bind(0);
}
EOF_SCHED_C

“$gcc” $gccsopt “$sfile” > “$out” 2>&1
if test $? -ne 0 -o ! -x “$sofile” ; then
has_sched_setaffinity=0
else
“$sofile” >> “$out” 2>&1
if test -s “$out” ; then
has_sched_setaffinity=0
else
has_sched_setaffinity=1
fi
fi

print_line ‘set LOCALRC=YES;’

Make the necessary changes to meet glibc dependencies.

if test -n “$glibc” ; then # {
if test -n “$LIB” ; then
if test $network -eq 1 ; then
print_line “set COMPGLIBDIR=$LIB;”
if test -n “$locdir” ; then
locdirused=1
if test $noexec -eq 0 ; then
copy_one_file $LIB/libpgc.so $locdir/lib/libpgc.so
fi
fi
elif test $noexec -eq 0 ; then
copy_files $LIB $base/lib
fi
fi

case “$glibc” in # {
21* )
;;
2*) # default 2.2 and beyond
if test -n “$INC” ; then
if test $network -eq 1 ; then
print_line “set COMPGINCDIR=$INC;”
elif test $noexec -eq 0 ; then
copy_files $INC $base/include
fi
fi
print_line “set THROW=__THROW=;”
print_line “set EXTENSION=extension=;”
;;
esac # }

Large file support.

if test -n “$LIBLF” ; then # {
if test $network -eq 1 ; then
print_line “set COMPGLIBLFDIR=$LIBLF;”
if test -n “$locdir” ; then
print_line “set LOCALCOMPLIBLF=$locdir/liblf;”
if test $noexec -eq 0 ; then
copy_one_file $LIBLF/libpgc.so $locdir/liblf/libpgc.so
fi
fi
elif test $noexec -eq 0 ; then
copy_files $LIBLF $base/liblf
fi
else # }else{
if test $network -eq 1 ; then
print_line “set COMPGLIBLFDIR=;”
elif test $noexec -eq 0 ; then
rm -rf $base/liblf
fi
fi # }

Adjust header files based on the gcc version.

case “$gccversion” in # {
3.3* )
if test $network -eq 1 ; then
print_line “set COMPGCCINCDIR=include-gcc33;”
elif test $noexec -eq 0 ; then
copy_files $base/include-gcc33 $base/include
fi
;;
3.4* )
if test $network -eq 1 ; then
print_line “set COMPGCCINCDIR=include-gcc34;”
elif test $noexec -eq 0 ; then
copy_files $base/include-gcc34 $base/include
fi
;;
3.* )
;;
4.1* )
if test $network -eq 1 ; then
print_line “set COMPGCCINCDIR=include-gcc41;”
elif test $noexec -eq 0 ; then
copy_files $base/include-gcc41 $base/include
fi
;;
4.* )
if test $network -eq 1 ; then
print_line “set COMPGCCINCDIR=include-gcc40;”
elif test $noexec -eq 0 ; then
copy_files $base/include-gcc40 $base/include
fi
;;

  • )
    ;;
    esac # }

Set LC

if test -e “$GCCDIR/libgcc_eh.a” ; then
print_line “set LC=$if(-Bstatic,-lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc, -lgcc -lc -lgcc);”
else
print_line “set LC=-lgcc -lc -lgcc;”
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
print_line “# GLIBC version $GLIBC_VERSION”
print_line “# GCC version $gccversion”

Test if /usr/lib is a symlink

if it points to 64-bit object then set DEFLIBDIR to /usr/lib32

if test -L /usr/lib; then
if file /usr/lib/crtn.o| sed -e 's/.*64.*/64/' == ‘64’; then
print_line “set DEFLIBDIR=/usr/lib32;”
print_line “set DEFSTDOBJDIR=/usr/lib32;”
fi
fi

\

For production non-network installations,

recover some space by unneeded files.

if test “$version” != “dev” -a “$version” != “mine” -a $network -eq 0 ; then
rm -rf $base/include-g*
echo $GLIBC_VERSION > $base/glibc_version
fi

Fix the 32/64-bit .*rc files.

###! Is this strictly necessary??

if test $noexec = 0 ; then # {
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
if test $network -eq 0 ; then
rm -f $base/bin/.pg*-32 > /dev/null 2>&1
fi
elif test $use_64bit_rcfiles -eq 10; then # }else if{
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
if test $network -eq 0 ; then
rm -f $base/bin/.pg*-64 > /dev/null 2>&1
fi
fi # }

handle libnuma(libpgnuma), libpgbind

x=$base
x=echo $x | sed -e 's/.*86-64.*/86-64/'
if test “$x” = “86-64” ; then # {
if test $network -eq 0 ; then # {
if test “$syslibnuma” = “1” ; then
rm -rf $base/$libso/libnuma.*
rm -rf $base/lib/libnuma.*
else
rm -rf $base/$libso/libnuma*
rm -rf $base/lib/libnuma.*
ln -s $base/$libso/libpgnuma.so $base/$libso/libnuma.so.1
ln -s $base/$libso/libpgnuma.so $base/$libso/libnuma.so
ln -s $base/$libso/libpgnuma.so $base/lib/libnuma.so.1
ln -s $base/$libso/libpgnuma.so $base/lib/libnuma.so
fi
else # } else {
if test -n “$locdir” ; then
if test “$syslibnuma” = “1” ; then
rm -rf “$locdir”/lib64/libnuma.*
else
builddir “$locdir”/lib64
locdir64used=1
copy_one_file $base/libso/libpgnuma.so “$locdir”/lib64/libnuma.so
copy_one_file $base/libso/libpgnuma.so “$locdir”/lib64/libnuma.so.1
rm -rf $base/lib/libnuma.*
rm -rf $base/$libso/libnuma.*
fi
fi
fi # }

if test $network -eq 0 ; then # {
if test “$has_sched_setaffinity” = “1” ; then
cp -d $base/lib/libpgbind_real.a $base/lib/libpgbind.a
rm -rf $base/lib/libpgbind.so
if test -d $base/$libso ; then
ln -s $base/$libso/libpgbind.so $base/lib/libpgbind.so
cp -d $base/$libso/libpgbind_real.a $base/$libso/libpgbind.a
cp -d $base/$libso/libpgbind_real.so $base/$libso/libpgbind.so
fi
else
cp -d $base/lib/libpgbind_dum.a $base/lib/libpgbind.a
rm -rf $base/lib/libpgbind.so
ln -s $base/$libso/libpgbind.so $base/lib/libpgbind.so
if test -d $base/$libso ; then
cp -d $base/$libso/libpgbind_dum.a $base/$libso/libpgbind.a
cp -d $base/$libso/libpgbind_dum.so $base/$libso/libpgbind.so
fi
fi
else # } else {
if test -n “$locdir” ; then
builddir “$locdir”/lib64
locdir64used=1
if test “$has_sched_setaffinity” = “1” ; then
copy_one_file $base/lib/libpgbind_real.a “$locdir”/lib64/libpgbind.a
copy_one_file $base/libso/libpgbind_real.so “$locdir”/lib64/libpgbind.so
else
copy_one_file $base/lib/libpgbind_dum.a “$locdir”/lib64/libpgbind.a
copy_one_file $base/libso/libpgbind_dum.so “$locdir”/lib64/libpgbind.so
fi
fi
fi # }
if test “$version” != “dev” -a “$version” != “mine” -a $network -eq 0 ; then

clean up libpgbind_*

rm -f $base/lib/libpgbind_.a
rm -f $base/lib/libpgbind_
.so
if test -d $base/$libso ; then
rm -f $base/$libso/libpgbind_.a
rm -f $base/$libso/libpgbind_
.so
fi
fi
else # } else {
if test $network -eq 0 ; then # {
if test “$syslibnuma” = “1” ; then
rm -rf $base/lib/libnuma.*
else
rm -rf $base/lib/libnuma.*
ln -s $base/lib/libpgnuma.so $base/lib/libnuma.so.1
ln -s $base/lib/libpgnuma.so $base/lib/libnuma.so
fi
else # } else {
if test -n “$locdir” ; then
if test “$syslibnuma” = “1” ; then
rm -rf “$locdir”/lib/libnuma.*
else
locdirused=1
copy_one_file $base/lib/libpgnuma.so “$locdir”/lib/libnuma.so
copy_one_file $base/lib/libpgnuma.so “$locdir”/lib/libnuma.so.1
rm -rf $base/lib/libnuma.*
fi
fi
fi # }
if test $network -eq 0 ; then # {
if test “$has_sched_setaffinity” = “1” ; then
cp -d $base/lib/libpgbind_real.a $base/lib/libpgbind.a
cp -d $base/lib/libpgbind_real.so $base/lib/libpgbind.so
else
cp -d $base/lib/libpgbind_dum.a $base/lib/libpgbind.a
cp -d $base/lib/libpgbind_dum.so $base/lib/libpgbind.so
fi
else # } else {
if test -n “$locdir” ; then
builddir “$locdir”/lib
locdirused=1
if test “$has_sched_setaffinity” = “1” ; then
copy_one_file $base/lib/libpgbind_real.a “$locdir”/lib/libpgbind.a
copy_one_file $base/lib/libpgbind_real.so “$locdir”/lib/libpgbind.so
else
copy_one_file $base/lib/libpgbind_dum.a “$locdir”/lib/libpgbind.a
copy_one_file $base/lib/libpgbind_dum.so “$locdir”/lib/libpgbind.so
fi
fi
fi # }
if test “$version” != “dev” -a “$version” != “mine” -a $network -eq 0 ; then

clean up libpgbind_*

rm -f $base/lib/libpgbind_.a
rm -f $base/lib/libpgbind_
.so
if test -d $base/$libso ; then
rm -f $base/$libso/libpgbind_.a
rm -f $base/$libso/libpgbind_
.so
fi
fi
fi # }
fi # }
fi # }

if test -n “$locdirused” ; then
print_line “set LOCALCOMPLIB=$locdir/lib;”
elif test -n “$locdir64used” ; then
print_line “set LOCALCOMPLIB=$locdir/lib64;”
fi

Add license file to LM_LICENSE_FILE

if test -n “$license” ; then
print_line “variable LM_LICENSE_FILE is environment(LM_LICENSE_FILE);”

note single quotes below, dollar signs must be output here

print_line ‘export LM_LICENSE_FILE=$if($notequal($LM_LICENSE_FILE,),$LM_LICENSE_FILE:)’$license";"
fi

print_line “export PGI=$pgidir;”

Add timestamp and username.

print_line '# makelocalrc executed by ’ whoami date

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
pretty_print ‘GCC version’ ^ $gccversion

if test -n “$GLIBC_VERSION” ; then
pretty_print ‘GNU LIBC 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

pretty_print ‘Threads’ ^ “$usrlib/libpthread.{a,so}”

if test “$syslibnuma” = “1” ; then
pretty_print 'system libnuma.a ’ ^ ‘exists’
fi
if test “$has_sched_setaffinity” = “1” ; then
pretty_print 'sched_setaffinity ’ ^ ‘works’
else
pretty_print 'sched_setaffinity ’ ^ ‘fails’
fi

if test -f $localrc ; then
if diff -I’^#.*’ $newrc $localrc > /dev/null ; then
pretty_print $localrcname ^ “exists and is the same”
else
pretty_print $localrcname ^ “exists and is different”
if test ! -w “$outputdir” ; then
pretty_print “$outputdir” ^ “is not writable”
fi
fi
else
pretty_print $localrcname ^ “does not exist”
if test ! -w “$outputdir” ; then
pretty_print “PATH entry” ^ “is not writable”
fi
fi
fi # }

\

If $ofile is set, then display the file to stdout. Otherwise, write

it to $localrc.

if test $ofile -eq 1 ; then
echo “##### $localrcname contents #####”
cat $newrc
echo “############################”
rm -f $newrc
elif test $noexec -eq 1 ; then
quit 0
elif test ! -w “$outputdir” ; then
echo “$outputdir” is not writable
rm -f $newrc
else
if test -f $localrc ; then
if diff -I’^#.*’ $newrc $localrc > /dev/null ; then
echo $localrcname has not changed
fi
if mv -f $localrc $localrc.bak ; then
if chmod -f 0644 $localrc.bak ; then
f=f
else
echo Error setting permission for backup version of $localrc
fi
else
echo Error saving backup version of $localrc
fi
fi
if mv -f $newrc $localrc ; then
if chmod -f 0644 $localrc ; then
f=f
else
echo Error setting permission for $localrc
fi
else
echo Error creating $localrc
rm -f $newrc
fi
fi

quit 0

Thanks,
George

Hi,

I am looking for localrc, not makelocalrc. Can you please post localrc file?

Thank you,
Hongyon

Hi,

I can’t fiind localrc in /opt/pgi/linux86-64/7.1-1/bin/localrc or anywhere else.

Thanks,
George

Hi,

makelocal did not finish the job and quit when it could not find the linker. Can you please write a small hello program or just empty program and compile using gcc -v and redirect its output in a file named out and then run following command:

% grep collect2 out | sed q | sed -e ‘s/.* -dynamic-linker //’ -e ‘s/ .*//’

It should gives you a linker, if not:

What is the output?
What is in out file?

Thank you,
Hongyon

Hi again,

When I try to compile a simple hello program I get this message:

/usr/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status

Any Ideas?

Thanks for your time!
George

Hi,

Did you compile with gcc -v? I am trying to determine where your linker is located.

Here is command:
% gcc -v hello.c >& out
% grep collect2 out | sed q | sed -e ‘s/.* -dynamic-linker //’ -e ‘s/ .*//’

Now, what is in file named out?
And what is the output from grep command?

Hongyon

Hi Hongyon,

The out file :

Using built-in specs.
Target: x86_64-linux-gnu
Configured with: …/src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
/usr/lib/gcc/x86_64-linux-gnu/4.2.3/cc1 -quiet -v hello.c -quiet -dumpbase hello.c -mtune=generic -auxbase hello -version -fstack-protector -fstack-protector -o /tmp/ccE1fpZ6.s
ignoring nonexistent directory “/usr/local/include/x86_64-linux-gnu”
ignoring nonexistent directory “/usr/lib/gcc/x86_64-linux-gnu/4.2.3/…/…/…/…/x86_64-linux-gnu/include”
ignoring nonexistent directory “/usr/include/x86_64-linux-gnu”
#include “…” search starts here:
#include <…> search starts here:
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.2.3/include
/usr/include
End of search list.
GNU C version 4.2.3 (Ubuntu 4.2.3-2ubuntu7) (x86_64-linux-gnu)
compiled by GNU C version 4.2.3 (Ubuntu 4.2.3-2ubuntu7).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=63946
Compiler executable checksum: 04286fa30e0b1c736cc2bb914c15518c
as --traditional-format -V -Qy -o /tmp/ccyMRZMc.o /tmp/ccE1fpZ6.s
GNU assembler version 2.18.0 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.18.0.20080103
/usr/lib/gcc/x86_64-linux-gnu/4.2.3/collect2 --eh-frame-hdr -m elf_x86_64 --hash-style=both -dynamic-linker /lib64/ld-linux-x86-64.so.2 crt1.o crti.o /usr/lib/gcc/x86_64-linux-gnu/4.2.3/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.2.3 -L/usr/lib/gcc/x86_64-linux-gnu/4.2.3 -L/usr/lib/gcc/x86_64-linux-gnu/4.2.3/…/…/…/…/lib -L/lib/…/lib -L/usr/lib/…/lib -L/usr/lib/gcc/x86_64-linux-gnu/4.2.3/…/…/… /tmp/ccyMRZMc.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/4.2.3/crtend.o crtn.o
/usr/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status

and the output from the grep command is the following:
/lib64/ld-linux-x86-64.so.2

George

Hi George,

You will need to install another Ubantu package.
Here is command:

%sudo apt-get install build-essential

You might need to do this first:
% sudo apt-get update

Which will fetch all of the most recent packages.

For more information: https://help.ubantu.com/community/InstallingCompilers

Then either reinstall PGI compilers or just rerun makelocalrc.

Hongyon

Hi Hongyon,

Thanks very much for your help! I was able to install pgi and i tested the installation by compliling a simple f.90 program. The problem is that while I was running makelocalrc
I got this message:
test: 614: ==: unexpected operator
test: 552: ==: unexpected operator

the installation finished and as i mentioned above all seem to work fine. Will I encounter any problems in the future?

Thanks again,
George

Hi George,

I would rerun makelocalrc again. Our Ubantu recommend updating a symlink .
From /bin/sh -> /bin/dash

To /bin/sh -> /bin/bash

See this thread for detail:
https://forums.developer.nvidia.com/t/error-linker-not-found-ubuntu-linux-server-7/130804/1

Note that you may need to run makelocalrc twice, one for 32-bit and another for 64-bit.

Hope it works.
Hongyon

Hongyon,

How do I update the symlink?

George

Hi,

% ln -s target link_name

You need to remove /bin/sh first, make sure it is a symlink before removing.

man ln for more detail.

Hongyon

Sorry for thread revival but I did not want to start a new topic. When installing PGI 10.0 on Ubuntu 9.1 64 bit I get error: unknown gcc version . I am using Ubuntu 9.1. My version of GCC is(Ubuntu 4.4.1-4ubuntu8). Any help much appreciated, thank you

Hi repettus,

I asked our customer service person about this. He said that while we did get this error when installing PGI 9.0, the PGI 2010 (10.0) installer had been updated to recognize this newer GCC version.

Can you please verify that you are installing PGI 10.0? If so, please send a note to PGI Customer Support (trs@pgroup.com).

Thanks,
Mat