2017-01-16 8 views
1

コンパイルが必要なプロジェクトコードはC言語です。プロジェクトはVisual Studio 2015で正しくコンパイルされますが、linux(Ubuntu)に移行する必要があります次のタイプの:クロスプラットフォーム(Linux)のC言語でコードをコンパイルする際にエラーが発生しました

/jpeglib8.h:1011:8: error: expected '=', ',', ';', 'asm' or 'attribute' before 'void' EXTERN (void) jpeg_CreateCompress JPP ((j_compress_ptr cinfo,

1005 #define jpeg_create_compress(cinfo) \ 
1006  jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ 
1007    (size_t) sizeof(struct jpeg_compress_struct)) 
1008 #define jpeg_create_decompress(cinfo) \ 
1009  jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ 
1010     (size_t) sizeof(struct jpeg_decompress_struct)) 
1011 EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo, 
1012       int version, size_t structsize)); 
1013 EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo, 
1014     int version, size_t structsize)); 

どうやら何の構文エラーはありません。私は本当に助けに感謝します、ありがとう。

答えて

1

プロジェクト内EXTERNマクロ定義でそれに見て変数を割り当てる(記憶域を割り当てる)か、単に定義する(それらを知らせる)。それはこのように動作します:上記で

// main.c 
#define EXTERN 
#include "myinclude.h" 

// sub-module.c 
#include "myinclude.h" 

// myinclude.h 
#ifndef EXTERN 
#define EXTERN extern 
#endif 
EXTERN int myvar; 
EXTERN void do_something(int a); 

myinclude.hmain.cにinludedされたときに、ディレクティブEXTERNは何も設定されているので、変数int myvarが割り当てられます。それを含む他のすべてのモジュールでは、それはexternに設定され、変数だけを定義します。

関数の場合、これはプロトタイプの出現ではもう必要ありません。

1

EXTERNは、Visual Studio 2015コンパイラによって定義され、十分に前処理されたマクロである可能性があります。あなたのLinuxコンパイラ環境の下ではあまり定義されていないかのように見えます。私の意見では、あなたがする必要があります

  1. は、中間前処理ファイルを生成し、
  2. EXTERNマクロが頻繁に宣言するために使用されている
関連する問題