2017-01-16 105 views
1

我需要編譯的項目代碼是C.該項目在Visual Studio 2015中編譯正確,但我需要將它遷移到Linux(Ubuntu),它給了我錯誤以下類型的:編譯c代碼時出現跨平臺錯誤(Linux)

/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設置爲Nothing等變量int myvar將分配。在包含它的所有其他模塊中,它將被設置爲extern,因此只定義變量。

對於功能而言,隨着原型的出現,不再需要這些功能。

1

EXTERN可能是由Visual Studio 2015編譯器定義並預處理的宏。它看起來在你的Linux編譯器環境下沒有或沒有很好的定義。在我看來,你應該:

  1. 生成中間處理後的文件,並在其上具有外觀
  2. 看看在你的項目中EXTERN宏定義