Building Lammps as a shared library with meam

Hi,

I am using the 10Aug15 version of lammps and am having trouble building on mac 10.6.8 as a shared library with the meam package.

When I try to build I get this error:

Undefined symbols for architecture x86_64:
“__intel_fast_memcpy”, referenced from:
compute_pair_meam in libmeam.a(meam_setup_done.o)
interpolate_meam in libmeam.a(meam_setup_done.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[1]: *** [shlib] Error 1
make: *** [mac] Error 2

Here is the Makefile.mac i am using:

mac = Apple PowerBook G4 laptop, c++, no MPI, FFTW 2.1.5

SHELL = /bin/sh

---------------------------------------------------------------------

compiler/linker settings

specify flags and libraries needed for your compiler

CC = g++
CCFLAGS = -O
SHFLAGS = -fPIC
DEPFLAGS = -M

LINK = ifort
LINKFLAGS = -O
LIB = -lmeam
SIZE = size

ARCHIVE = ar
ARFLAGS = -rc
SHLIBFLAGS = -shared

---------------------------------------------------------------------

LAMMPS-specific settings, all OPTIONAL

specify settings for LAMMPS features you will use

if you change any -D setting, do full re-compile after “make clean”

LAMMPS ifdef settings

see possible settings in Section 2.2 (step 4) of manual

LMP_INC = -DLAMMPS_GZIP

MPI library

see discussion in Section 2.2 (step 5) of manual

MPI wrapper compiler/linker can provide this info

can point to dummy MPI library in src/STUBS as in Makefile.serial

use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts

INC = path for mpi.h, MPI compiler settings

PATH = path for MPI library

LIB = name of MPI library

MPI_INC = -I…/STUBS
MPI_PATH = -L…/STUBS
MPI_LIB = -lmpi_stubs

FFT library

see discussion in Section 2.2 (step 6) of manaul

can be left blank to use provided KISS FFT library

INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings

PATH = path for FFT library

LIB = name of FFT library

FFT_INC = -DFFT_FFTW
FFT_PATH =
FFT_LIB = -lfftw

JPEG and/or PNG library

see discussion in Section 2.2 (step 7) of manual

only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC

INC = path(s) for jpeglib.h and/or png.h

PATH = path(s) for JPEG library and/or PNG library

LIB = name(s) of JPEG library and/or PNG library

JPG_INC =
JPG_PATH =
JPG_LIB =

I would appreciate any help with this
Jacob Holesinger

Hi,

   I am using the 10Aug15 version of lammps and am having trouble building
on mac 10.6.8 as a shared library with the meam package.

When I try to build I get this error:

Undefined symbols for architecture x86_64:
  "__intel_fast_memcpy", referenced from:
      _compute_pair_meam_ in libmeam.a(meam_setup_done.o)
      _interpolate_meam_ in libmeam.a(meam_setup_done.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[1]: *** [shlib] Error 1
make: *** [mac] Error 2

Here is the Makefile.mac i am using:

# mac = Apple PowerBook G4 laptop, c++, no MPI, FFTW 2.1.5

[...]

I would appreciate any help with this

you are mixing the GNU C++ and the Intel Fortran compiler, for that
you need to link to the runtime libraries for both compilers. when
using g++ as linker, the GNU C++ runtime and the standard C library is
included, but some part of the intel compiler runtime is missing. what
the exact libraries are, depends on the specific version of the intel
compiler you have. i suspect the settings in
lib/meam/Makefile.lammps.ifort assume that you are using also the
intel C++ compiler. on my desktop, you would need to add -lirc to the
linker flags in lib/meam/Makefile.lammps.ifort to make the linker
error from above go away when combining g++ compiled code with ifort
compiled code.

axel.

Mixing GNU and Intel compilers is a bad idea. You should either
re-compile LAMMPS with the Intel compiler or re-compile the meam
library with the GNU FORTRAN compiler (gfortran). If you do the
latter, you will need to add -lgfortran to your link command, which
you do by editing ./lib/meam/Makefile.lammps as follows:

[[email protected]... src]$ more ../lib/meam/Makefile.lammps
# Settings that the LAMMPS build will import when this package library is used

meam_SYSINC =
meam_SYSLIB = -lgfortran
meam_SYSPATH =