Now I see the problem. The Open MPI binaries were build with Microsoft cl compiler, it has different name conventions, so the symbols couldn't be resolved by g++ compiler. I've started the native MinGW compiler support, some projects can already be built via gcc or g++, but it's not finished yet.


Regards,
Shiqing

On 2011-08-09 3:19 PM, renyong.yang wrote:
Hi,

I'm using mingw g++, the IDE is eclipse cdt,

these are all the info:

make all 
'Building file: ../src/mpi_test1.cpp'
'Invoking: Cross G++ Compiler'
g++ -I"C:\Program Files\OpenMPI_v1.5.3-win32\include" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/mpi_test1.d" -MT"src/mpi_test1.d" -o "src/mpi_test1.o" "../src/mpi_test1.cpp"
'Finished building: ../src/mpi_test1.cpp'
' '
'Building target: mpi_test1'
'Invoking: Cross G++ Linker'
g++ -L"C:\Program Files\OpenMPI_v1.5.3-win32\bin" -o "mpi_test1"  ./src/mpi_test1.o   -lmpi
c:/program files/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/bin/ld.exe: warning: auto-importing has been activated without --enable-auto-import specified on the command line.
This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.
./src/mpi_test1.o: In function `main':
C:\Users\yong\workspace\mpi_test1\Debug/../src/mpi_test1.cpp:21: undefined reference to `MPI::COMM_WORLD'
C:\Users\yong\workspace\mpi_test1\Debug/../src/mpi_test1.cpp:23: undefined reference to `MPI::COMM_WORLD'
./src/mpi_test1.o: In function `Intracomm':
C:/Program Files/OpenMPI_v1.5.3-win32/include/openmpi/ompi/mpi/cxx/intracomm.h:25: undefined reference to `MPI::Comm::Comm()'
./src/mpi_test1.o:C:/Program Files/OpenMPI_v1.5.3-win32/include/openmpi/ompi/mpi/cxx/functions_inln.h:91: undefined reference to `MPI::InitializeIntercepts()'
./src/mpi_test1.o: In function `Intracomm':
C:/Program Files/OpenMPI_v1.5.3-win32/include/openmpi/ompi/mpi/cxx/intracomm_inln.h:23: undefined reference to `MPI::Comm::Comm()'
./src/mpi_test1.o:C:/Program Files/OpenMPI_v1.5.3-win32/include/openmpi/ompi/mpi/cxx/op_inln.h:122: undefined reference to `ompi_mpi_cxx_op_intercept'
./src/mpi_test1.o:mpi_test1.cpp:(.rdata$_ZTVN3MPI3WinE[vtable for MPI::Win]+0x24): undefined reference to `MPI::Win::Free()'
./src/mpi_test1.o:mpi_test1.cpp:(.rdata$_ZTVN3MPI8DatatypeE[vtable for MPI::Datatype]+0x3c): undefined reference to `MPI::Datatype::Free()'
collect2: ld returned 1 exit status
make: *** [mpi_test1] Error 1
Info: resolving _ompi_mpi_comm_null by linking to __imp__ompi_mpi_comm_null (auto-import)



2011/8/9 Shiqing Fan <fan@hlrs.de>
Hi,

Which command did you use to compile your code?

I tried following code on my Windows 7 machine with compile command "mpicxx hello.cpp":

hello.cpp
===================================
# include "mpi.h"
using namespace std;


int main ( int argc, char *argv[] )
{
  int rank, size;

  MPI::Init ( argc, argv );

  size = MPI::COMM_WORLD.Get_size ( );

  rank = MPI::COMM_WORLD.Get_rank ( );

  printf("Rank # %d \n", rank);

  MPI::Finalize ( );

  return 0;
}


console output :
======================================
d:\work\OpenMPI\tests\CXX>mpicxx hello.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

hello.cpp
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:hello.exe
"/LIBPATH:C:\Program Files\OpenMPI_v1.5.3-win32\lib"
libmpi_cxx.lib
libmpi.lib
libopen-pal.lib
libopen-rte.lib
advapi32.lib
Ws2_32.lib
shlwapi.lib
hello.obj

d:\work\OpenMPI\tests\CXX>mpirun -np 2 hello.exe
Rank # 0
Rank # 1


Regards,
Shiqing


On 2011-08-09 3:04 PM, renyong.yang wrote:
I compiled the simple code with "Microsoft Compute Cluster Pack" on Windows and if I load its own loader "mpiexec.exe" within its program folder, the program can work correctly, however if I tried to use your loader "C:\Program Files\OpenMPI_v1.5.3-win32\bin\mpiexec.exe" and  "C:\Program Files\OpenMPI_v1.5.3-win32\bin\mpirun.exe", the process it created is always with rank "0". BTW, I compile the code with "Microsoft Compute Cluster Pack" because the simple code can not be compiled with the v1.5.3 release for windows, the compiler complains:

./src/mpi_test1.o: In function `Intracomm':
C:/Program Files/OpenMPI_v1.5.3-win32/include/openmpi/ompi/mpi/cxx/intracomm.h:25: undefined reference to `MPI::Comm::Comm()'
./src/mpi_test1.o: In function `Intracomm':
C:/Program Files/OpenMPI_v1.5.3-win32/include/openmpi/ompi/mpi/cxx/intracomm_inln.h:23: undefined reference to `MPI::Comm::Comm()'
./src/mpi_test1.o:C:/Program Files/OpenMPI_v1.5.3-win32/include/openmpi/ompi/mpi/cxx/op_inln.h:122: undefined reference to `ompi_mpi_cxx_op_intercept'
./src/mpi_test1.o:mpi_test1.cpp:(.rdata$_ZTVN3MPI3WinE[vtable for MPI::Win]+0x24): undefined reference to `MPI::Win::Free()'
./src/mpi_test1.o:mpi_test1.cpp:(.rdata$_ZTVN3MPI8DatatypeE[vtable for MPI::Datatype]+0x3c): undefined reference to `MPI::Datatype::Free()'
collect2: ld returned 1 exit status
make: *** [mpi_test1] Error 1

When I tried CMake with GUI for version 1.4.3, no .sln file generated, is there something I've missed?

Regardes~~
Renyong


2011/8/9 renyong.yang <yangrenyong@gmail.com>
Hi,

    I've solved the same weird error on Linux, but have not tried Windows yet. The error recurs on Linux system, when I firstly use mpich on my Linux, the program works fine, then I uninstalled it and switched to your open-mpi,  the error came out without warning, and I tried to change the compiler to mpic++ other than g++, the error remains. So I doubt if the Boost.MPI is compatible with current MPI system, I recompiled the Boost.MPI library and substituted the old ones, the code with Boost library came back to work. So I guess the old compiled Boost library depends on other library like mpich, so it can't work with current open-mpi because they are incompatible, however, I'm still confused why simple code (In the last mail I sent to you) which does not depend on Boost library(I never used mpich on Windows before), can not work.

Wishes~
Renyong

2011/8/9 Shiqing Fan <fan@hlrs.de>
Hi,

The code works for me under MinGW console with the pre-compiled installer. Could you try "which mpicc" to ensure that the correct Open MPI commands are in path?

For building Open MPI by your self with CMake, you have to configure it in the GUI and then generate the sln files by pressing the generate button. I don't recommend to use the other two means, they haven't been tested for some while.


Regards,
Shiqing


On 2011-08-09 3:48 AM, renyong.yang wrote:
hi,
 the following code:
int main(int argc, char **argv)
{
int  procnum;

/* Initialize MPI */
MPI_Init(&argc, &argv);

/* Find out this processor number */
MPI_Comm_rank(MPI_COMM_WORLD, &procnum);
/* Find out the number of processors */
std::cout << "I'm process: " << procnum << std::endl;
MPI_Finalize();

return 0;
}

also goes with the same rank "0" error, I think if there's something wrong with the auxiliary program "mpirun" ?

BTW, I tried all the 3 means on your  http://svn.open-mpi.org/svn/ompi/trunk/README.WINDOWS.txt guideline but none worked to compile my own dll for http://www.open-mpi.org/software/ompi/v1.4/downloads/openmpi-1.4.3.tar.bz2, the first approach failed because I found no .sln file in the distributed tarballs after configuring with cmake, the second mean I can not use is the lacking of ompi-static.tgz file, the 3rd solution I tried does not work neither, because I don't know what the ash.exe shell interpreter you are actually pointing to, so I'd be much appreciated if you can tell me the  a working approach. Thanks very much.

2011/8/9 Shiqing Fan <fan@hlrs.de>
Hi,

I've never tried this Boost.MPI with Open MPI on Windows. Does it work without the Boost.MPI library? Did you run your test under MinGW?


Regards,
Shiqing


On 2011-08-08 5:31 PM, renyong.yang wrote:
 Run time environment of mine is Windows 7, with the unstable OpenMPI_v1.5.3-2_win32.exe release for Windows, together with Microsoft Compute Cluster Pack. Additionally I'm using Boost.MPI library v1.47 compiled by mingw, I write those following codes:
int main(int argc, char **argv)
{
mpi::environment env(argc, argv); // Boost.MPI class
boost::mpi::communicator worldCom; // Boost.MPI class
std::cout << "rank():" << worldCom.rank() << std::endl;
        worldCom.barrier();

return 0;
}
and successfully compiled and linked with your library as "a.exe" by mingw, however, if I run it:
>mpirun -np 4 a.exe
the command will create 4 process with the same rank "0", I wonder if it's the bug of your unstable release for windows?
BTW, can you publish the Visual studio project to the subversion? Thanks very much.



_______________________________________________
devel mailing list
devel@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel


-- 
---------------------------------------------------------------
Shiqing Fan
High Performance Computing Center Stuttgart (HLRS)
Tel: ++49(0)711-685-87234      Nobelstrasse 19
Fax: ++49(0)711-685-65832      70569 Stuttgart
http://www.hlrs.de/organization/people/shiqing-fan/
email: fan@hlrs.de



-- 
---------------------------------------------------------------
Shiqing Fan
High Performance Computing Center Stuttgart (HLRS)
Tel: ++49(0)711-685-87234      Nobelstrasse 19
Fax: ++49(0)711-685-65832      70569 Stuttgart
http://www.hlrs.de/organization/people/shiqing-fan/
email: fan@hlrs.de




-- 
---------------------------------------------------------------
Shiqing Fan
High Performance Computing Center Stuttgart (HLRS)
Tel: ++49(0)711-685-87234      Nobelstrasse 19
Fax: ++49(0)711-685-65832      70569 Stuttgart
http://www.hlrs.de/organization/people/shiqing-fan/
email: fan@hlrs.de



-- 
---------------------------------------------------------------
Shiqing Fan
High Performance Computing Center Stuttgart (HLRS)
Tel: ++49(0)711-685-87234      Nobelstrasse 19
Fax: ++49(0)711-685-65832      70569 Stuttgart
http://www.hlrs.de/organization/people/shiqing-fan/
email: fan@hlrs.de