Hello
I have a problem compiling VASP.6.1.1 on a macOS Catalina 10.15.6. I use gfortran. Both the make.include and the output from the make command files are included as attachments. I copy the crash here.
% make
if [ ! -d build/std ] ; then mkdir build/std ; fi; \
cp src/makefile src/.objects makefile.include build/std ; \
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C build/std VERSION=std all
rsync -ru ../../src/lib .
cp makefile.include lib
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C lib -j1
make libdmy.a
gcc -O -c -o getshmem.o getshmem.c
getshmem.c:23:42: error: use of undeclared identifier 'SHM_NORESERVE'
shmflg = IPC_CREAT | IPC_EXCL | 0600 | SHM_NORESERVE ;
^
getshmem.c:40:42: error: use of undeclared identifier 'SHM_NORESERVE'
shmflg = IPC_CREAT | IPC_EXCL | 0600 | SHM_NORESERVE ;
^
2 errors generated.
make[3]: *** [getshmem.o] Error 1
make[2]: *** [all] Error 2
make[1]: *** [lib] Error 2
make: *** [std] Error 2
Thank you,
Nick
Compiling VASP.6.1.1 on a macOS Catalina 10.15.6-errors
Moderators: Global Moderator, Moderator
-
- Newbie
- Posts: 21
- Joined: Tue Sep 15, 2020 3:36 pm
Compiling VASP.6.1.1 on a macOS Catalina 10.15.6-errors
You do not have the required permissions to view the files attached to this post.
- chengcheng_xiao1
- Newbie
- Posts: 26
- Joined: Sun Nov 17, 2019 6:23 pm
- Location: London, UK
- Contact:
Re: Compiling VASP.6.1.1 on a macOS Catalina 10.15.6-errors
The fix can be found here https://thelostelectron.wordpress.com/tag/vasp/.
Note that installing VASP on your laptop might be a violation of the user agreement.
Note that installing VASP on your laptop might be a violation of the user agreement.
-
- Global Moderator
- Posts: 506
- Joined: Mon Nov 04, 2019 12:41 pm
- Contact:
Re: Compiling VASP.6.1.1 on a macOS Catalina 10.15.6-errors
Note that the solution posted above might fix the compilation but it does not explain the issue or why and if the fix works.
The getshmem.c file contains a custom implementation of shared memory used by VASP.
If you look inside the code you will see specific system calls for example: shmget
here is the Linux manual:
https://man7.org/linux/man-pages/man2/shmget.2.html
there is a macOS counterpart:
https://developer.apple.com/library/arc ... get.2.html
This system call is specific of System V: https://en.wikipedia.org/wiki/UNIX_System_V
Without going into too much details, this is a function is provided by the operating system which might or might not be implemented in macOS with the same arguments as Linux.
This seemd to be the case here: the SHM_NORESERVE option does not exist in macOS (and hence not defined in the header) so the function should not be called in the same way as in Linux.
As such, I would say that the fix suggested above is not the most appropriate.
Note that you only need the getshmem.o object when you want to use the custom shared memory implementation inside VASP i.e. when '-Duse_shmem -Dshmem_rproj -Dshmem_bcast_buffer' are present in CPP_OPTIONS.
If this is not the case, the proper fix would be to remove getshmem.o from OBJECTS_LIB and skip the compilation of this file altogether.
TL;DR
The shared memory feature provided by getshmem.c is not officially supported on macOS, as such you should:
- NOT use any of the -Duse_shmem -Dshmem_rproj -Dshmem_bcast_buffer in CPP_OPTIONS
- remove getshmem.o from OBJECTS_LIB
The getshmem.c file contains a custom implementation of shared memory used by VASP.
If you look inside the code you will see specific system calls for example: shmget
here is the Linux manual:
https://man7.org/linux/man-pages/man2/shmget.2.html
there is a macOS counterpart:
https://developer.apple.com/library/arc ... get.2.html
This system call is specific of System V: https://en.wikipedia.org/wiki/UNIX_System_V
Without going into too much details, this is a function is provided by the operating system which might or might not be implemented in macOS with the same arguments as Linux.
This seemd to be the case here: the SHM_NORESERVE option does not exist in macOS (and hence not defined in the header) so the function should not be called in the same way as in Linux.
As such, I would say that the fix suggested above is not the most appropriate.
Note that you only need the getshmem.o object when you want to use the custom shared memory implementation inside VASP i.e. when '-Duse_shmem -Dshmem_rproj -Dshmem_bcast_buffer' are present in CPP_OPTIONS.
If this is not the case, the proper fix would be to remove getshmem.o from OBJECTS_LIB and skip the compilation of this file altogether.
TL;DR
The shared memory feature provided by getshmem.c is not officially supported on macOS, as such you should:
- NOT use any of the -Duse_shmem -Dshmem_rproj -Dshmem_bcast_buffer in CPP_OPTIONS
- remove getshmem.o from OBJECTS_LIB