2016-12-01 30 views
0

LinuxシステムでmpiC++を使用してプログラムをコンパイルしようとしています。このプログラムには教授が提供するソースファイルが含まれています。これらのファイルはエラーを投げます。 Visual Studio C++ではコードをコンパイルするのに問題はありませんが、Linuxシステムで起動するようになっており、mpiC++を使用してコンパイルするためにLinuxシステムに移動するとエラーが発生します。mpiC++エラーを使用したC++コンパイル

mpic++ -std=c++11 -Wall -c CommonApprox.cpp 
In file included from ApproxIface.h:3:0, 
       from CommonApprox.h:3, 
       from CommonApprox.cpp:1: 
referencedIface.h:23:19: error: '__stdcall' declared as a 'virtual' field 
referencedIface.h:23:19: error: expected ';' at end of member declaration 
referencedIface.h:23:90: error: ISO C++ forbids declaration of 'QueryInterface'   with no type [-fpermissive] 
referencedIface.h:24:17: error: '__stdcall' declared as a 'virtual' field 
referencedIface.h:24:17: error: expected ';' at end of member declaration 
referencedIface.h:24:17: error: redeclaration of 'ULONG IReferenced::__stdcall' 
referencedIface.h:23:19: note: previous declaration 'HRESULT IReferenced::__stdc   all' 

erorrsが続き、これらはほんの最初の数です。この特定のエラーが参照するコードを以下に示します。

#define IfaceCalling __stdcall 

class IReferenced { 
    /* Actually, this is IUnknown of the WinAPI's COM 
    HRESULT and ULONG are used to allow possible and easy interoperability 
    accross different compilers and languages on Windows 
    */ 

public: 
    virtual HRESULT IfaceCalling QueryInterface(/*REFIID */ void* riid,  void ** ppvObj) = 0; 
    virtual ULONG IfaceCalling AddRef() = 0; 
    virtual ULONG IfaceCalling Release() = 0; 
}; 

私が知る限り、私たちは私たちに提供されたコードを変更することはできません。

ありがとうございました。

編集:

私はプログラムをコンパイルするためにmakefileを使用します。

OBJECTS = CommonApprox.o DatabaseHandler.o MaskHandler.o Output.o StatsHandler.o GlucoseLevels.o AkimaInterpolation.o CatmullRomInterpolation.o ApproxIface.o referencedImpl.o main.o 

CFLAGS = -std=c++11 -Wall 
LIBS = -lsqlite3 -ltbb 
CC = mpic++ 

all: ku_ppr_distr 

ku_ppr_distr : $(OBJECTS) 
    $(CC) $(CFLAGS) $^ $(LIBS) -o [email protected] 
    rm -f *.o 

CommonApprox.o: CommonApprox.cpp CommonApprox.h hresult.h 
    $(CC) $(CFLAGS) -c CommonApprox.cpp 

DatabaseHandler.o: DatabaseHandler.cpp DatabaseHandler.h 
    $(CC) $(CFLAGS) -c DatabaseHandler.cpp 

MaskHandler.o: MaskHandler.cpp MaskHandler.h 
    $(CC) $(CFLAGS) -c MaskHandler.cpp 

Output.o: Output.cpp Output.h 
    $(CC) $(CFLAGS) -c Output.cpp 

StatsHandler.o: StatsHandler.cpp StatsHandler.h 
    $(CC) $(CFLAGS) -c StatsHandler.cpp 

GlucoseLevels.o: GlucoseLevels.cpp GlucoseLevels.h 
    $(CC) $(CFLAGS) -c GlucoseLevels.cpp 

AkimaInterpolation.o: AkimaInterpolation.cpp AkimaInterpolation.h 
    $(CC) $(CFLAGS) -c AkimaInterpolation.cpp 

CatmullRomInterpolation.o: CatmullRomInterpolation.cpp CatmullRomInterpolation.h 
    $(CC) $(CFLAGS) -c CatmullRomInterpolation.cpp 

ApproxIface.o: ApproxIface.cpp ApproxIface.h 
    $(CC) $(CFLAGS) -c ApproxIface.cpp 

referencedImpl.o: referencedImpl.cpp referencedImpl.h 
    $(CC) $(CFLAGS) -c referencedImpl.cpp 

main.o: main.cpp 
    $(CC) -w $(CFLAGS) -c main.cpp 

%.o: %.c 
    $(CC) -c $< 

clean: 
    rm -f *.o 

答えて

0

mpic++g++のラッパー(Linux上でGNU C++コンパイラ)です。 __stdcallは、g++によって認識されない生成されたコードを制御するVisual C++固有のコンパイラ指令です。あなたはかなりの数のエラーメッセージを取り払う必要があることを

CFLAGS = -D__stdcall= -std=c++11 -Wall

つまり、あなたのメイクファイルに __stdcallにnullの定義を追加してみてください。返信用

+0

おかげで、私は を追加することによって、問題を修正 '_WINDOWS' #ifndefの'の#define __stdcall' '#endif' (申し訳ありませんが、私はコメントで複数行のコードを書く方法を知りません) – finrod

+0

私はあなたに与えられたコードを変更することを許されていないと言いました。それが私があなたがmakefileでやるよう提案した理由です:) – stanthomas

関連する問題