在 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 编译器环境下没有或没有很好地定义。在我看来,你应该:
- 生成中间预处理文件并查看
- 查看项目中的
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
,因此只定义变量。
对于函数,随着原型的出现,这不再是必需的。
我需要编译的项目代码在 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 编译器环境下没有或没有很好地定义。在我看来,你应该:
- 生成中间预处理文件并查看
- 查看项目中的
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
,因此只定义变量。
对于函数,随着原型的出现,这不再是必需的。