C++ mit MPI kompilieren geht nicht?



  • Jo hallo,

    ich versuche folgendes file:

    #include <iostream>
    #include <string>
    #include <mpi.h>
    
    int main(int argc, char* argv[])
    {
    
        #ifdef MPI
            std::cout << "MPI" << std::endl;
            MPI_Init(&argc, &argv);
            MPI_Finalize();
        #else
            std::cout << "KEIN MPI" << std::endl;
        #endif
        int a = 9;
    
    }
    

    so zu kompilieren:

    mpicxx -o out main.cpp -DMPI
    

    und bekomme so eine fehlermeldung:

    /usr/include/mpi2c++/mpi++.h:90: error: expected identifier before numeric constant
    /usr/include/mpi2c++/mpi++.h:90: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/functions_inln.h: In function ‘void PMPI::Real_init()’:
    /usr/include/mpi2c++/functions_inln.h:101: error: expected `;' before ‘::’ token
    /usr/include/mpi2c++/functions_inln.h: In function ‘void PMPI::Finalize()’:
    /usr/include/mpi2c++/functions_inln.h:123: error: expected `;' before ‘::’ token
    /usr/include/mpi2c++/intracomm_inln.h: In constructor ‘PMPI::Intracomm::Intracomm(const MPI_Comm&)’:
    /usr/include/mpi2c++/intracomm_inln.h:33: error: expected `)' before ‘::’ token
    /usr/include/mpi2c++/topology_inln.h: In constructor ‘PMPI::Cartcomm::Cartcomm(const MPI_Comm&)’:
    /usr/include/mpi2c++/topology_inln.h:37: error: expected `)' before ‘::’ token
    /usr/include/mpi2c++/topology_inln.h: In constructor ‘PMPI::Graphcomm::Graphcomm(const MPI_Comm&)’:
    /usr/include/mpi2c++/topology_inln.h:166: error: expected `)' before ‘::’ token
    /usr/include/mpi2c++/op_inln.h: At global scope:
    /usr/include/mpi2c++/op_inln.h:33: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/op_inln.h:36: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/op_inln.h:39: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/op_inln.h:42: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/op_inln.h:45: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/op_inln.h:51: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/op_inln.h:56: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/op_inln.h:61: error: expected unqualified-id before numeric constant
    /usr/include/mpi2c++/op_inln.h:65: error: expected unqualified-id before numeric constant
    

    mache ich das ganze über das folgende kommando gehts - aber so habe ich natürlich nicht das FLAG MPI benutzt:

    mpicxx -o out main.cpp
    

    Warum entsteht denn durch das flag setzten das Problem? Weiß jemand zufällig wie ich mit mpi und dem flag richtig kompilieren kann?

    Danke



  • Liegt das vllt. an der Bezeichnung? MPI wird vielleicht intern schon verwendet, hast du schon mal versuch eine andere Bezeichnung versucht oder versucht das #ifdef ganz wegzulassen.



  • ja du hast recht. Benutze ich MPI2 z.B. als FLAG dann gehts. Das wundert mich jetzt ein wenig weil ich einen großen beispielcode vor mir habe bei dem das Flag als MPI benutzt wird. also irgendwie haut es bei denen ja hin. ist nur schwer da was rauszufinden weil die über die gnu-toolchain mit autoconf etc. gearbeitet haben....



  • benutze bei solchen Flags die du selbst einbaust immer längere Namen von denen du sicher bist, dass sie noch nicht vorgekommen sind. Ist zwar schreibaufwändiger, aber dann passiert sowas nicht. Beispielsweise weren häufig namespace-namen mit in die Flags eingebaut oder Firmen-namen.

    In einem Projekt das sich mit MPI beschäftigt ein Flag mit Namen MPI einzuführen halte ich für ziemlich blauäugig 😉



  • danke für den Tip - ich werde ihn in zukunft beherzigen....doch ist mir leider noch nicht klar warum es deshalb kracht...bzw. warum das ding schon irgendwo belegt ist etc...



  • moin2 schrieb:

    doch ist mir leider noch nicht klar warum es deshalb kracht...bzw. warum das ding schon irgendwo belegt ist etc...

    Kannst du in deiner IDE nicht auf den Bezeichner rechtsklicken und sowas wie "Gehe zur Deklaration" auswählen (ich kenne das von MSVC++)?


Anmelden zum Antworten