Re: [petsc-dev] How to configure parallel petsc on windows?
On 11/20/2011 9:45 PM, Satish Balay wrote:
On Sun, 20 Nov 2011, John R. Cary wrote:
On 11/20/2011 11:09 AM, Satish Balay wrote:
On Sun, 20 Nov 2011, Satish Balay wrote:
Executing: mingw32-gfortran -o conftest.exe -Wall -Wno-unused-variable -O -I/winsame/contrib-mingw/microsoft-hpc-mingw/Include conftest.o /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpifec.lib /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpi.lib -L/winsame/builds-mingw/facetsall-mingw/petsc-3.1-p8/par/c:/mingw/lib/gcc/mingw32/4.6.1 -L/winsame/builds-mingw/facetsall-mingw/petsc-3.1-p8/par/c:/mingw/lib/gcc -L/winsame/builds-mingw/facetsall-mingw/petsc-3.1-p8/par/c:/mingw/mingw32/lib -L/winsame/builds-mingw/facetsall-mingw/petsc-3.1-p8/par/c:/mingw/lib -L/mingw/lib -lmingw32 -lgcc_eh -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 sh: Possible ERROR while running linker: Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" ' unrecognized /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpifec.lib(obj/i386/mpif.obj):(.text[_mpi_recv_]+0x1f): undefined reference to `_imp__MPI_F_STATUS_IGNORE' ... (repetitions of the last line) /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpifec.lib(obj/i386/mpif.obj):(.text[_mpirinitc]+0x25): undefined reference to `_imp__MPI_F_STATUSES_IGNORE' collect2: ld returned 1 exit status
Source: program main include 'mpif.h' integer ierr call mpi_init(ierr) end
<<<<<<<<<<<<<
Perhaps msmpi libs are using some internal notation that mingw-gfortran is unable to interpret? The unresolved symbols are coming from /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpifec.lib and I think should be resolved by either /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpifec.lib or /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpi.lib
I would check with:
nm -Ao /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpifec.lib /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpi.lib |grep _imp__MPI_F_STATUS_IGNORE Should also try to compile that simple mpi fortran code snippet directly with mingw32-gfortran - and see if that works.
mingw32-gfortran conftest.f -o conftest.exe -I/winsame/contrib-mingw/microsoft-hpc-mingw/Include /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpifec.lib /winsame/contrib-mingw/microsoft-hpc-mingw/lib/i386/msmpi.lib So I confirm what you found. I also found
http://social.microsoft.com/Forums/is/windowshpcmpi/thread/fa213e91-5b83-419...
which indicates this is a known problem. The basic symbol is in msmpi.lib:
xena.cary$ link /dump /exports msmpi.lib | grep -i mpi_f_st _MPI_F_STATUSES_IGNORE _MPI_F_STATUS_IGNORE
But not the symbol desired by msmpifec.lib:
xena.cary$ nm msmpifec.lib | grep -i mpi_f_st U __imp__MPI_F_STATUSES_IGNORE U __imp__MPI_F_STATUS_IGNORE
So seems not to be mingw but just a fact of the msmpi package. Hm - but I guess this error doesn't show up with ifort.
So my initial guess about 'extra notation/metadata' in the lib file that nm/gnu-ld sounds more feasible. [and gnu tools nm, gnu-ld are unable to parse this stuff. However MS's linker might be resolving this stuff correctly]
Perhaps 'dumpbin /symbols foo.lib' shows what MS linker is looking at.
xena.cary$ dumpbin.exe /symbols C:"\winsame\contrib-mingw\microsoft-hpc-mingw\Lib\i386\msmpifec.lib" | grep F_STATUS_IGNORE 01B 00000000 UNDEF notype External | __imp__MPI_F_STATUS_IGNORE
Either way - looks like msmpi is unuseable from mingw-gfortran.
Agreed. Seems that ifort and MS-Link can resolve what gfortran cannot. I have a summary on these issues that I will send to the list. John
participants (1)
-
John R. Cary