在 c 中为跨平台编译代码时出错 (Linux)

Error compiling code in c for cross-platform (Linux)

我需要编译的项目代码在 C 中。该项目在 Visual Studio 2015 中正确编译,但我需要将其迁移到 linux (Ubuntu),它给了我以下类型的错误:

/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));

显然没有语法错误。非常感谢您的帮助,谢谢。

EXTERN 可能是一个由 Visual Studio 2015 编译器定义和预处理的宏。看起来它在您的 Linux 编译器环境下没有或没有很好地定义。在我看来,你应该:

  1. 生成中间预处理文件并查看
  2. 查看项目中的 EXTERN 宏定义

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.h包含在main.c中时,指令EXTERN被设置为空,所以变量int myvar将被分配。在包含它的所有其他模块中,它将被设置为 extern,因此只定义变量。

对于函数,随着原型的出现,这不再是必需的。