0

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

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'

エラーは何度も発生しますが、これらは最初の数例にすぎません。この特定のエラーが参照するコードを以下に示します。

#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;
};

私の知る限り、提供されたコードを変更することは許可されていません。

助けてくれてありがとう。

編集:

プログラムのコンパイルにはメイクファイルを使用します。

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 $@ 
    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
4

1 に答える 1

0

mpic++g++(Linux 上の GNU C++ コンパイラ)のラッパーです。__stdcallによって認識されない生成コードを制御するための Visual C++ 固有のコンパイラ ディレクティブg++です。のヌル定義を__stdcallメイクファイルに追加してみてください。

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

これにより、かなりの数のエラー メッセージが取り除かれます。

于 2016-12-04T22:04:01.967 に答える