2011-12-15 34 views
0

私の現在の職業はMinGW(Windows)からVisual Studio(nmake)にCプログラムを移植することです。MinGWからVisualStudioへのCコンパイル(nmake)

私は非常によく似たCプログラムのための有効な "makefile.vc"ファイルを持っています。 私のアプローチは、移植する必要があるプログラムにMakefile(つまり "makefile.vc")を採用することでした。

4つ以外のCファイルはすべてコンパイルされているようです。これら4つのファイルには、構文エラーや「不明なサイズ」などのさまざまなエラーがあります。

私は、Makefileを変更したり、nmakeの代わりにCMAKEを使用したりしていきますか?

MinGW/gccからnmakeへのCプログラムの移植に関するチュートリアルやその他のポインタはありますか?

typedef struct { 
    A_TypeConverter *converter; 
    char *domain; 
} enumeratorConverterEntry; 
static enumeratorConverterEntry enumeratorConverterEntries[]; /* line 186 */ 

エラー:

f.c(186) : error C2133: 'enumeratorConverterEntries' : unknown size 


typedef struct AsmInstructionInfo { 
    int flags; 
    CONST char **argTypes; /* line 7 */ 
    int minArgs; 
    int maxArgs; 
    int cArgs; 
} AsmInstructionInfo; 

エラー:

fAssemble.c(7) : error C2061: syntax error : identifier 'CONST' 

..

/* file fStack.c: */ 

#ifdef CHECK_ACTIVATION_COUNTS 

/* code */ 
#endif 

/* more code */ 

void fShowStack(l_Interp *interp) { /* line 94 */ 
    l_CallFrame *framePtr; 

/* more code */ 

エラー:

fStack.c(94) : error C2143: syntax error : missing ')' before '*' 
fStack.c(94) : error C2143: syntax error : missing '{' before '*' 
fStack.c(94) : error C2059: syntax error : ')' 
fStack.c(94) : error C2054: expected '(' to follow 'interp' 
+1

あなたの問題はmake/nmakeではなく、Cプログラムそのものにあるようです。正確なエラーメッシュと関連するコードの断片を表示できますか? – osgx

+0

は、2番目にコードを追加します – mrsteve

+0

このようなC配列では定義できません。あなたのエラーは、移植とは何の関係もありません。あなたの情報のために –

答えて

1
static enumeratorConverterEntry enumeratorConverterEntries[]; /* line 186 */ 

。私は私の目の前に 'C'標準のコピーを持っていませんが、グーグル "静的配列の前方宣言"の結果の行間を読むと、という静的な配列の定義が不完全であることがわかります。未定義の動作であるため、MicrosoftとGNUは、必要としているものはすべて正当に実行できます。 GNUはそれを受け入れ、Microsoftはそれを拒否します。マーク・ウィルキンスが指摘するようにあなたがそれを置き換えることで、Microsoftのコンパイラを幸せにする必要があります:一般的に

extern enumeratorConverterEntry enumeratorConverterEntries[]; /* line 186 */ 

GNUコンパイラはC99標準の一部をサポートしていながら、それは、マイクロソフトのコンパイラは唯一C89標準をサポートしていることは注目に値します、およびコンパイラの引数に応じて独自の拡張機能をいくつか使用します。

fAssemble.cとfStack.cのエラーは、1つ以上のプリプロセッサフ​​ァイルが不足しているか不完全であるようです。 CONSTとl_Interpがどこに定義されているかを調べるためにあなたのソースを検索し、エラーが発生しているファイルでなぜそれらが選択されていないのかを調べるべきです。

1

私はMinGWでその配列宣言を試してみましたが、コンパイルします。しかし、それをリンクさせるには、配列を他の場所で定義する必要があります。結果は、にexternストレージ・クラスと同じように見えるということです。

extern enumeratorConverterEntry enumeratorConverterEntries[]; 

私は地球のための静的記憶クラスを使用して、元の宣言に関連する他の微妙な点がある場合はわかりません。私は、静的な修飾子のためだと思う除き、有効な構文となり、配列の有効な不完全な、前方宣言、のように見える

関連する問題