Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] Windows C++ Linker Error "unresolved symbol" for MPI::Datatype::Free
From: Ralph Castain (rhc_at_[hidden])
Date: 2013-02-21 12:26:43


On Feb 21, 2013, at 9:13 AM, "Hartman, Todd W." <thartman_at_[hidden]> wrote:

> Gee, that's too bad. I assumed that the 1.6.4 Windows build was delayed
> because it was a lower priority. Do you suppose this position was taken
> because there are no developers wishing to keep it alive?

Afraid that is true. However, the cygwin folks have provided a cygwin package, so there is at least an option that work on Windows.

>
>
> -----Original Message-----
> From: users-bounces_at_[hidden] [mailto:users-bounces_at_[hidden]] On
> Behalf Of Damien Hocking
> Sent: Thursday, February 21, 2013 10:00 AM
> To: Open MPI Users
> Subject: Re: [OMPI users] Windows C++ Linker Error "unresolved symbol" for
> MPI::Datatype::Free
>
> Well this is interesting. The linker can't find that because
> MPI::Datatype::Free isn't implemented on the Windows build (in
> datatype_inln.h). It's declared in datatype.h though. It's not there in
> the Linux version either, so I don't know where the Linux build is getting
> that symbol from, that link should fail too. Is the C++ version of OpenMPI
> actually broken overall?
>
> The Windows support is another issue. I think it's semi-officially
> deprecated.
>
> Damien
>
> On 20/02/2013 11:20 PM, Hartman, Todd W. wrote:
>> I'm trying to build a simple Open MPI application for Windows. I've
> installed the binaries for OpenMPI-v1.6.2 (64-bit). I've also installed
> Visual Studio 2010. The machine(s) are Windows 7 x64.
>>
>>
>> When I attempt to compile a simple program that uses MPI::Send(), I get a
> linker error saying that it cannot resolve MPI::Datatype::Free().
>>
>> Here's a minimal example:
>>
>> ---------------------------------------------------
>> #include <mpi.h>
>> #include <iostream>
>> int main( int argc, char** argv ) {
>> MPI::Init(argc,argv);
>>
>> // Meant to run with 2 processes.
>> if (MPI::COMM_WORLD.Get_rank() == 0) {
>> int data;
>> MPI::COMM_WORLD.Recv(&data,1,MPI_INT,1,0);
>> std::cout << "received " << data << std::endl;
>> } else {
>> int data = 0xdead;
>> std::cout << "sending " << data << std::endl;
>> MPI::COMM_WORLD.Send(&data,1,MPI_INT,0,0);
>> }
>>
>> MPI::Finalize();
>> }
>> ---------------------------------------------------
>>
>> When I compile it:
>>
>> mpic++ send_compile.cpp -o send_compile.exe -DOMPI_IMPORTS
>> mpic++ -DOPAL_IMPORTS -DORTE_IMPORTS
>>
>>
>> ---------------------------------------------------
>> Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
>> Copyright (C) Microsoft Corporation. All rights reserved.
>>
>>
>>
>>
>> cl : Command line warning D9035 : option 'o' has been deprecated and
>> will be removed in a future release send_compile.cpp Microsoft (R)
>> Incremental Linker Version 10.00.40219.01 Copyright (C) Microsoft
>> Corporation. All rights reserved.
>>
>> /out:send_compile.exe
>> /out:send_compile.exe
>> "/LIBPATH:C:\Program Files (x86)\OpenMPI_v1.6.2-x64/lib"
>> libmpi_cxx.lib
>> libmpi.lib
>> libopen-pal.lib
>> libopen-rte.lib
>> advapi32.lib
>> Ws2_32.lib
>> shlwapi.lib
>> send_compile.obj
>> send_compile.obj : error LNK2001: unresolved external symbol "public:
>> virtual void __cdecl MPI::Datatype::Free(void)"
>> (?Free_at_Datatype@MPI@@UEAAXXZ) send_compile.exe : fatal error LNK1120:
>> 1 unresolved externals
>> ---------------------------------------------------
>>
>> This program compiles and runs without complaint on an Ubuntu machine
> around here. I don't know what the problem is. Open MPI's documentation
> didn't say anything about adding the CPP defines (OMPI_IMPORTS,
> OPAL_IMPORTS, ORTE_IMPORTS) whose absence were causing other linker errors
> similar to this. Google found some items in the mailing list archive. I
> cannot find any information about this particular problem, though.
>>
>> I tried using dumpbin to get symbols that were in the .lib files installed
> by MPI, but didn't find any reference to that function name. I didn't find
> any answers looking in the MPI headers, either.
>>
>> I have a similar program in C that compiles and runs fine on this Windows
> machine. I don't know what I'm doing wrong with C++. Can someone point me in
> the right direction? Is there some documentation regarding getting things to
> work on Windows? The release notes don't address this problem, and I can't
> find any other documentation related to what might be different from *nix to
> Windows (WRT to Open MPI).
>>
>> Thanks.
>>
>>
>> todd.
>>
>> P.S. This is copied from a StackOverflow question I posted
> (http://stackoverflow.com/questions/14988099/open-mpi-c-link-error-mpidataty
> pefree-on-windows). Forgive the cross-posting.
>> _______________________________________________
>> users mailing list
>> users_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/users
>
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users