MPI-C++-Includefail



  • Hi,

    also ich habe folgendes Problem bezüglich des Compilierens eines C++-Programms mit dem MPI-Compiler

    Ich habe eine main.cpp und zwei klassen Master und Slaves beide mit .h und .cpp Dateien.
    Zusätzlich wollte ich mir eine Headerdatei schreiben (myMPI.h) in welche ich alle mpi Calls Kapsele und welche mal von Master und Slaves includiert werden soll.

    Wenn ich aber nun (mit mpi-Calls oder auch ohne) versuche das ganze mit dem mpic++ compiler zu kompilieren wie folgt:

    mpic++ -o test SudokuValidator.cpp Master.cpp Slaves.cpp
    

    kommt ein Fehler, dass alle Methoden die in der myMPI.h stehen doppelt:

    Slaves.cpp:(.text+0x0): multiple definition of `sendadsWork()'
    /tmp/cc0nf4rq.o:Master.cpp:(.text+0x0): first defined here
    /tmp/cc5yOwBk.o: In function `receivasdfeWork()':
    Slaves.cpp:(.text+0x5): multiple definition of `receivasdfeWork()'
    /tmp/cc0nf4rq.o:Master.cpp:(.text+0x5): first defined here
    /tmp/cc5yOwBk.o: In function `sendadsfResult()':
    Slaves.cpp:(.text+0xa): multiple definition of `sendadsfResult()'
    /tmp/cc0nf4rq.o:Master.cpp:(.text+0xa): first defined here
    /tmp/cc5yOwBk.o: In function `receiveadsfResult()':
    Slaves.cpp:(.text+0xf): multiple definition of `receiveadsfResult()'
    /tmp/cc0nf4rq.o:Master.cpp:(.text+0xf): first defined here
    collect2: ld returned 1 exit status
    

    Ich habe hierbei extra die Methodennamen verunstaltet damit nicht woanders ein Konflikt auftreten kann.

    Beheben kann ich den Fehler (was mich aber nicht weiterbringt) indem ich die myMPI.h entweder nur in die Master.cpp oder in die Slaves.cpp include oder nur in die Slaves.h includiere

    Wenn ich versuche, sie in die Master.h zu packen knallt es sofort.

    Die vermeindliche myMPI.h hat aber sogar diesen PreCompiler ifndef schutz:
    http://code.pastebin.com/m0rCu9cH

    der trotzdem ignoriert wird.

    Also was mach ich falsch?

    Danke für alle Vorschläge!



  • Ich habs gefunden.

    NIEMALS FUNKTIONSDEFINITIONEN IN DIE HEADER MACHEN... auch wenn mans mehr oder weniger so von faulen Professoren beigebracht bekommt!


Anmelden zum Antworten