Hi,

You are using the C++ compiler ('g++') instead of 'gcc' (C compiler). This 
causes some
extra name mangling in 'sockets.o' that confuses the linking stage.

 Best regards,

  Alberto



----- El 20 de Noviembre de 2018, a las 04:30, Zhiping Xu [email protected] 
escribió:

| Dear Siesta developers/users:
| 
| I tried to compile the trunk branch (746 revisions). However, although I
| compiled the code successfully as a serial version, the compilation with MPI
| does not work, reporting the following errors at the last step (linking obj
| files into the executables):
| 
| fsockets.o: In function `__f90sockets_MOD_readbuffer_dv':
| fsockets.f90:(.text+0x23): undefined reference to `readbuffer'
| fsockets.o: In function `__f90sockets_MOD_readbuffer_s':
| fsockets.f90:(.text+0x89): undefined reference to `readbuffer'
| fsockets.f90:(.text+0xef): undefined reference to `readbuffer'
| fsockets.o: In function `__f90sockets_MOD_readbuffer_i':
| fsockets.f90:(.text+0x125): undefined reference to `readbuffer'
| fsockets.o: In function `__f90sockets_MOD_readbuffer_d':
| fsockets.f90:(.text+0x155): undefined reference to `readbuffer'
| fsockets.o: In function `__f90sockets_MOD_writebuffer_dv':
| fsockets.f90:(.text+0x183): undefined reference to `writebuffer'
| fsockets.o: In function `__f90sockets_MOD_writebuffer_s':
| fsockets.f90:(.text+0x1fc): undefined reference to `writebuffer'
| fsockets.f90:(.text+0x221): undefined reference to `writebuffer'
| fsockets.o: In function `__f90sockets_MOD_writebuffer_i':
| fsockets.f90:(.text+0x257): undefined reference to `writebuffer'
| fsockets.o: In function `__f90sockets_MOD_writebuffer_d':
| fsockets.f90:(.text+0x27b): undefined reference to `writebuffer'
| fsockets.o: In function `__f90sockets_MOD_create_socket':
| fsockets.f90:(.text+0x38f): undefined reference to `create_socket'
| fsockets.o: In function `__f90sockets_MOD_open_socket':
| fsockets.f90:(.text+0x41f): undefined reference to `open_socket'
| fsockets.o: In function `__f90sockets_MOD_close_socket':
| fsockets.f90:(.text+0x1): undefined reference to `close_socket'
| collect2: error: ld returned 1 exit status
| 
| I wonder if you could help me to identify the problem? I am using intelmpi
| (g++/gfortran) and my arch.make file is as follows:
| 
| .SUFFIXES:
| .SUFFIXES: .f .F .o .c .a .f90 .F90
| 
| SIESTA_ARCH = x86-64
| 
| CC = g++
| FPP = $(FC) -E -P
| FC = mpif90
| FC_SERIAL = gfortran
| 
| FFLAGS = -O2 -fPIC
| 
| AR = ar
| RANLIB = ranlib
| 
| SYS = nag
| 
| SP_KIND = 4
| DP_KIND = 8
| KINDS = $(SP_KIND) $(DP_KIND)
| 
| LDFLAGS =
| 
| #COMP_LIBS = libsiestaLAPACK.a libsiestaBLAS.a
| 
| FPPFLAGS = $(DEFS_PREFIX)-DMPI -DFC_HAVE_FLUSH -DFC_HAVE_ABORT #
| 
| LIBS = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_lapack95_lp64
| -lmkl_intel_lp64 \
|      -lmkl_intel_thread -lmkl_core -liomp5 -lm -lpthread
| 
| # SIESTA needs an F90 interface to MPI
| MPI_INTERFACE = libmpi_f90.a
| MPI_INCLUDE = .
| 
| # Dependency rules ---------
| 
| FFLAGS_DEBUG = -g -O1   # your appropriate flags here...
| 
| # The atom.f code is very vulnerable. Particularly the Intel compiler
| # will make an erroneous compilation of atom.f with high optimization
| # levels.
| atom.o: atom.F
|       $(FC) -c $(FFLAGS_DEBUG) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_fixed_F) $<
| 
| .c.o:
|       $(CC) -c $(CFLAGS) $(INCFLAGS) $(CPPFLAGS) $<
| .F.o:
|       $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_fixed_F)  $<
| .F90.o:
|       $(FC) -c $(FFLAGS) $(INCFLAGS) $(FPPFLAGS) $(FPPFLAGS_free_F90) $<
| .f.o:
|       $(FC) -c $(FFLAGS) $(INCFLAGS) $(FCFLAGS_fixed_f)  $<
| .f90.o:
|       $(FC) -c $(FFLAGS) $(INCFLAGS) $(FCFLAGS_free_f90)  $<
| 
| 
| Thank you very much!
| 
| Best,
| Zhiping

Responder a