I need some help building blacs/scalapack under LAM on Macintosh OS X
(10.3) using g77/gcc.
I have read the blacs documentation, as well as the excellent guide to
porting blacs under LAM that is available at:
http://www.lam-mpi.org/3rd-party/blacs.php3
but I'm still getting the following behavior.
When I try to compile the blacs test program I get:
mpif77 -o
/home/rmuller/Programs/scalapack/BLACS/TESTING/EXE/xFbtest_MPI-MACOSX-0
blacstest.o btprim_MPI.o tools.o
/home/rmuller/Programs/scalapack/BLACS/LIB/blacsF77init_MPI-MACOSX-0.a
/home/rmuller/Programs/scalapack/BLACS/LIB/blacs_MPI-MACOSX-0.a
/home/rmuller/Programs/scalapack/BLACS/LIB/blacsF77init_MPI-MACOSX-0.a
/usr/bin/ld: Undefined symbols:
_Cblacs_gridinfo
_Cblacs_gridexit
_Cblacs_get
collect2: ld returned 1 exit status
make: ***
[/home/rmuller/Programs/scalapack/BLACS/TESTING/EXE/xFbtest_MPI-MACOSX
-0] Error 1
This is similar to the problems I get when I try and compile, say, the
example1.f file from the scalapack examples.
I've attached my Bmake.inc file to the end of this message. I've tried
a variety of values for the INTFACE command, in addition to the
recommended f77isF2C, but I inevitably get the same result.
I'm posting to this list since I saw a similar thread started by
ravindra a few weeks ago. Unfortunately, the work around suggested
there (-DAdd_) won't work for me (since I'm using g77, although I did
try to define -DAdd_ just to be sure).
I've poked around the .a library files with 'nm', and it looks like
_Cblacs_gridinfo is called in blacs_MPI-MACOSX-0.a, but not defined
there. Which makes me worry that it isn't even being built. Which makes
me think I'm doing something really dumb.
I would be grateful for any help that anyone can offer me.
Rick Muller - rmuller_at_[hidden] - http://www.cs.sandia.gov/~rmuller
Computational Materials and Molecular Biology
Sandia National Laboratories
PO Box 5800, M/S 1110
Albuquerque, NM 87185-1110
#=======================================================================
======
#====================== SECTION 1: PATHS AND LIBRARIES
=======================
#=======================================================================
======
# The following macros specify the name and location of libraries
required by
# the BLACS and its tester.
#=======================================================================
======
# --------------------------------------
# Make sure we've got a consistent shell
# --------------------------------------
SHELL = /bin/sh
# -----------------------------
# The top level BLACS directory
# -----------------------------
BTOPdir = /home/rmuller/Programs/scalapack/BLACS
#
------------------------------------------------------------------------
---
# The communication library your BLACS have been written for.
# Known choices (and the machines they run on) are:
#
# COMMLIB MACHINE
# .......
..............................................................
# CMMD Thinking Machine's CM-5
# MPI Wide variety of systems
# MPL IBM's SP series (SP1 and SP2)
# NX Intel's supercomputer series (iPSC2, iPSC/860, DELTA,
PARAGON)
# PVM Most unix machines; See PVM User's Guide for details
#
------------------------------------------------------------------------
---
COMMLIB = MPI
# -------------------------------------------------------------
# The platform identifier to suffix to the end of library names
# -------------------------------------------------------------
PLAT = MACOSX
# ----------------------------------------------------------
# Name and location of the BLACS library. See section 2 for
# details on BLACS debug level (BLACSDBGLVL).
# ----------------------------------------------------------
BLACSdir = $(BTOPdir)/LIB
BLACSDBGLVL = 0
BLACSFINIT =
$(BLACSdir)/blacsF77init_$(COMMLIB)-$(PLAT)-$(BLACSDBGLVL).a
BLACSCINIT =
$(BLACSdir)/blacsCinit_$(COMMLIB)-$(PLAT)-$(BLACSDBGLVL).a
BLACSLIB = $(BLACSdir)/blacs_$(COMMLIB)-$(PLAT)-$(BLACSDBGLVL).a
# -------------------------------------
# Name and location of the MPI library.
# -------------------------------------
MPIdir = /sw/
MPIdev =
MPIplat =
MPILIBdir =
MPIINCdir = $(MPIdir)/include
MPILIB =
# -------------------------------------
# All libraries required by the tester.
# -------------------------------------
BTLIBS = $(BLACSFINIT) $(BLACSLIB) $(BLACSFINIT) $(MPILIB)
# ----------------------------------------------------------------
# The directory to put the installation help routines' executables
# ----------------------------------------------------------------
INSTdir = $(BTOPdir)/INSTALL/EXE
# ------------------------------------------------
# The name and location of the tester's executable
# ------------------------------------------------
TESTdir = $(BTOPdir)/TESTING/EXE
FTESTexe = $(TESTdir)/xFbtest_$(COMMLIB)-$(PLAT)-$(BLACSDBGLVL)
CTESTexe = $(TESTdir)/xCbtest_$(COMMLIB)-$(PLAT)-$(BLACSDBGLVL)
#=======================================================================
======
#=============================== End SECTION 1
===============================
#=======================================================================
======
#=======================================================================
======
#========================= SECTION 2: BLACS INTERNALS
========================
#=======================================================================
======
# The following macro definitions set preprocessor values for the
BLACS.
# The file Bconfig.h sets these values if they are not set by the
makefile.
# User's compiling only the tester can skip this entire section.
# NOTE: The MPI defaults have been set for MPICH.
#=======================================================================
======
#
-----------------------------------------------------------------------
# The directory to find the required communication library include
files,
# if they are required by your system.
#
-----------------------------------------------------------------------
SYSINC =
#
------------------------------------------------------------------------
---
# The Fortran 77 to C interface to be used. If you are unsure of the
correct
# setting for your platform, compile and run BLACS/INSTALL/xintface.
# Choices are: Add_, NoChange, UpCase, or f77IsF2C.
#
------------------------------------------------------------------------
---
INTFACE = -Df77IsF2C
#
------------------------------------------------------------------------
# Allows the user to vary the topologies that the BLACS default
topologies
# (TOP = ' ') correspond to. If you wish to use a particular topology
# (as opposed to letting the BLACS make the choice), uncomment the
# following macros, and replace the character in single quotes with the
# topology of your choice.
#
------------------------------------------------------------------------
# DEFBSTOP = -DDefBSTop="'1'"
# DEFCOMBTOP = -DDefCombTop="'1'"
# -------------------------------------------------------------------
# If your MPI_Send is locally-blocking, substitute the following line
# for the empty macro definition below.
# SENDIS = -DSndIsLocBlk
# -------------------------------------------------------------------
SENDIS =
# --------------------------------------------------------------------
# If your MPI handles packing of non-contiguous messages by copying to
# another buffer or sending extra bytes, better performance may be
# obtained by replacing the empty macro definition below with the
# macro definition on the following line.
# BUFF = -DNoMpiBuff
# --------------------------------------------------------------------
BUFF =
#
-----------------------------------------------------------------------
# If you know something about your system, you may make it easier for
the
# BLACS to translate between C and fortran communicators. If the empty
# macro defininition is left alone, this translation will cause the C
# BLACS to globally block for MPI_COMM_WORLD on calls to BLACS_GRIDINIT
# and BLACS_GRIDMAP. If you choose one of the options for translating
# the context, neither the C or fortran calls will globally block.
# If you are using MPICH, or a derivitive system, you can replace the
# empty macro definition below with the following (note that if you let
# MPICH do the translation between C and fortran, you must also
indicate
# here if your system has pointers that are longer than integers. If
so,
# define -DPOINTER_64_BITS=1.) For help on setting TRANSCOMM, you can
# run BLACS/INSTALL/xtc_CsameF77 and BLACS/INSTALL/xtc_UseMpich as
# explained in BLACS/INSTALL/README.
# TRANSCOMM = -DUseMpich
TRANSCOMM = -DUseMPI2
#
# If you know that your MPI uses the same handles for fortran and C
# communicators, you can replace the empty macro definition below with
# the macro definition on the following line.
# TRANSCOMM = -DCSameF77
#
-----------------------------------------------------------------------
# TRANSCOMM =
#
------------------------------------------------------------------------
--
# You may choose to have the BLACS internally call either the C or
Fortran77
# interface to MPI by varying the following macro. If TRANSCOMM is
left
# empty, the C interface BLACS_GRIDMAP/BLACS_GRIDINIT will
globally-block if
# you choose to use the fortran internals, and the fortran interface
will
# block if you choose to use the C internals. It is recommended that
the
# user leave this macro definition blank, unless there is a strong
reason
# to prefer one MPI interface over the other.
# WHATMPI = -DUseF77Mpi
# WHATMPI = -DUseCMpi
#
------------------------------------------------------------------------
--
WHATMPI = -DUseF77Mpi
#
------------------------------------------------------------------------
---
# Some early versions of MPICH and its derivatives cannot handle user
defined
# zero byte data types. If your system has this problem (compile and
run
# BLACS/INSTALL/xsyserrors to check if unsure), replace the empty macro
# definition below with the macro definition on the following line.
# SYSERRORS = -DZeroByteTypeBug
#
------------------------------------------------------------------------
---
SYSERRORS =
# ------------------------------------------------------------------
# These macros set the debug level for the BLACS. The fastest
# code is produced by BlacsDebugLvl 0. Higher levels provide
# more debug information at the cost of performance. Present levels
# of debug are:
# 0 : No debug information
# 1 : Mainly parameter checking.
# ------------------------------------------------------------------
DEBUGLVL = -DBlacsDebugLvl=$(BLACSDBGLVL)
#
------------------------------------------------------------------------
-
# All BLACS definitions needed for compile (DEFS1 contains definitions
used
# by all BLACS versions).
#
------------------------------------------------------------------------
-
DEFS1 = -DSYSINC $(SYSINC) $(INTFACE) $(DEFBSTOP) $(DEFCOMBTOP)
$(DEBUGLVL)
BLACSDEFS = $(DEFS1) $(SENDIS) $(BUFF) $(TRANSCOMM) $(WHATMPI)
$(SYSERRORS)
#=======================================================================
======
#=============================== End SECTION 2
===============================
#=======================================================================
======
#=======================================================================
======
#=========================== SECTION 3: COMPILERS
============================
#=======================================================================
======
# The following macros specify compilers, linker/loaders, the archiver,
# and their options. Some of the fortran files need to be compiled
with no
# optimization. This is the F77NO_OPTFLAG. The usage of the remaining
# macros should be obvious from the names.
#=======================================================================
======
F77 = mpif77
F77NO_OPTFLAGS = -fno-globals -Wno-globals -fno-f90 -fugly-complex
F77FLAGS = $(F77NO_OPTFLAGS) -O
F77LOADER = $(F77)
F77LOADFLAGS =
CC = mpicc
CCFLAGS = -O3
CCLOADER = $(CC)
CCLOADFLAGS =
#
------------------------------------------------------------------------
--
# The archiver and the flag(s) to use when building an archive
(library).
# Also the ranlib routine. If your system has no ranlib, set RANLIB =
echo.
#
------------------------------------------------------------------------
--
ARCH = ar
ARCHFLAGS = r
RANLIB = ranlib
#=======================================================================
======
#=============================== End SECTION 3
===============================
#=======================================================================
======
|