2017-01-16 106 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宏定义