Network install and makelocalrc not finding stddef.h

I’ve completed a network install of PGI OpenACCToolkit2015, and executed the makelocalrc script on a development machine, but the resulting environment is unable to find stddef.h when compiling any program.

The network install was done to a shared (read only, cvmfs) file system. From a development machine makelocalrc was then run with:

$/cvmfs/rdlinux.ornl.gov/pgi/OpenACCToolkit2015/linux86-64/15.7/bin/makelocalrc -x  /cvmfs/rdlinux.ornl.gov/pgi/OpenACCToolkit2015/linux86-64/15.7/ -net /usr/pgi/shared/15.7 -d /usr/pgi/shared/15.7/

The resultant directory on the development machine contains only:

$ls /usr/pgi/shared/15.7/*
/usr/pgi/shared/15.7/localrc.linux-wc5v

/usr/pgi/shared/15.7/lib64:
libnuma.so

I’ve sourced the makelocalrc generated file: source /usr/pgi/shared/15.7/localrc.linux-wc5v

Though, I had to comment out this line from the generated file:

set LC=$if(-Bstatic,-lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc, -lgcc -lc -lgcc);

Otherwise it throws:

$source /usr/pgi/shared/15.7/localrc.linux-wc5v
bash: /usr/pgi/shared/15.7/localrc.linux-wc5v: line 17: syntax error near unexpected token `('
bash: /usr/pgi/shared/15.7/localrc.linux-wc5v: line 17: `set LC=$if(-Bstatic,-lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc, -lgcc -lc -lgcc);'

However, when attempting to compile any program I receive:

$acc_c1> make
pgcc -fast -Minfo -acc -o acc_c1.out acc_c1.c
PGC-F-0206-Can't find include file stddef.h (/cvmfs/rdlinux.ornl.gov/pgi/OpenACCToolkit2015/linux86-64/15.7/include-gcc44/stddef.h: 16)
PGC/x86-64 Linux 15.7-0: compilation aborted
Makefile:28: recipe for target 'build' failed
make: *** [build] Error 2

Full contents of the makelocalrc generated file for this development machine:

$cat localrc.linux-wc5v
set LDSO=/lib64/ld-linux-x86-64.so.2;
set GCCDIR=/usr/lib64/gcc/x86_64-suse-linux/4.8;
set GPPDIR32= /usr/include/c++/4.8 /usr/include/c++/4.8/x86_64-suse-linux/32 /usr/include/c++/4.8/backward /usr/lib64/gcc/x86_64-suse-linux/4.8/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/4.8/include-fixed /usr/lib64/gcc/x86_64-suse-linux/4.8/…/…/…/…/x86_64-suse-linux/include /usr/include In file included from /usr/include/features.h:402:0, from /usr/include/stdio.h:27, /usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory # include <gnu/stubs-32.h>;
set GPPDIR64= /usr/include/c++/4.8 /usr/include/c++/4.8/x86_64-suse-linux /usr/include/c++/4.8/backward /usr/lib64/gcc/x86_64-suse-linux/4.8/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/4.8/include-fixed /usr/lib64/gcc/x86_64-suse-linux/4.8/…/…/…/…/x86_64-suse-linux/include /usr/include;
set GCCINC32= /usr/lib64/gcc/x86_64-suse-linux/4.8/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/4.8/include-fixed /usr/lib64/gcc/x86_64-suse-linux/4.8/…/…/…/…/x86_64-suse-linux/include /usr/include In file included from /usr/include/features.h:402:0, from /usr/include/stdio.h:27, /usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory # include <gnu/stubs-32.h>;
set GCCINC64= /usr/lib64/gcc/x86_64-suse-linux/4.8/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/4.8/include-fixed /usr/lib64/gcc/x86_64-suse-linux/4.8/…/…/…/…/x86_64-suse-linux/include /usr/include;
set G77DIR="";
set OEM_INFO=64-bit target on x86-64 Linux $INFOTPVAL;
set GCCINC= /usr/lib64/gcc/x86_64-suse-linux/4.8/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/4.8/include-fixed /usr/lib64/gcc/x86_64-suse-linux/4.8/…/…/…/…/x86_64-suse-linux/include /usr/include;
set GPPDIR= /usr/include/c++/4.8 /usr/include/c++/4.8/x86_64-suse-linux /usr/include/c++/4.8/backward /usr/lib64/gcc/x86_64-suse-linux/4.8/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/4.8/include-fixed /usr/x86_64-suse-linux/include /usr/include;
set LOCALRC=YES;
set THROW=__THROW=;
set EXTENSION=extension=;
set COMPGLIBLFDIR=;
set COMPGCCINCDIR=include-gcc48;

Next Line gives error

set LC=$if(-Bstatic,-lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc, -lgcc -lc -lgcc);

GLIBC version 2.19

GCC version 4.8

set GCCVERSION=40801;
set LOCALDEFS=STDC_HOSTED;
set LOCALCOMPLIB=/usr/pgi/shared/15.7/lib64;
export PGI=$COMPBASE;

makelocalrc executed by tenzing Sat Sep 12 06:15:05

When you chose a network install in 15.7, you said the commonly
named local directory is

/usr/pgi/shared/15.7

I suggest that that is not local on each platform.
If you create a file ‘foo.txt’ on platform A in /usr/pgi/shared/15.7,
do you see that file when you login on platform B?
You should not.

/usr/pgi I assume is a commonly mounted directory where
PGI compilers are installed for all hosts to use.

With 15.7, the installer now creates ‘add_network_host’

Pick a directory you can create on every network target,
that has the same name, but is local to that target.

I use /local/home/myname/15.7/share_objects when
I installed on A, for the commonly named local directory

When I wish to now install on B, all I do is
export PGI=/usr/pgi
export PATH=$PGI/linux86-64/15.7/bin:$PATH

and then I run
add_network_host
which will then create
/local/home/myname/15.7/share_objects
on B, and then will run makelocalrc to create localrc.B

What goes into /local/home/myname/15.7/share_objects?
Header files unique to the Linux version on B, like stddef.h.

dave

Thank you for the help.

The /usr/pgi/shared/15.7 is actually local on each host, the ‘shared’ is a misnomer.

Our install does not appear to have the add_network_host

$echo $PGI
/cvmfs/rdlinux.ornl.gov/pgi/OpenACCToolkit2015/
$find $PGI | grep add
/cvmfs/rdlinux.ornl.gov/pgi/OpenACCToolkit2015/linux86-64/15.7/bin/addlocalrc

After running makelocalrc on a compute node it did create:

/usr/pgi/shared/15.7/lib64:
libnuma.so

Cheers,
Pete

I di not realize you had an OTK license. It is only good for one machine to
compile and run on.

So either you have a program that does not compile with gcc,
and you wish it to compile with pgcc (which will fail), or you
are using a different gcc than the one you installed pgcc with,
and the failure comes from pgcc, but not the new gcc.

I have seen a number of posts where the clang version of gcc failed to
include stddef.h, and a follow-up release fixed that,

dave