我想在Windows上编译 C源代码,这是为Linux发行版编写的主要代码。
/配置工作没有问题。
如果我使用命令 make 来编译源代码,我会遇到以下错误:
错误
grib_keys.c:50:34:
错误:' alphasort'未申报(首次使用此功能)
我的研究证明了我,这个问题已经解决了,但不幸的是,答案对我来说并不适用。
Implicit declaration of scandir; alphasort is undeclared
http://ubuntuforums.org/archive/index.php/t-1653576.html
解决方案说,我只需要包含以下内容: #define _GNU_SOURCE
我试过了,但正如已经说过的那样,它没有用。
我将其包含在以下文件中:
- grib_keys.c
- config.h
并尝试使用并发而非并发包含来编译它们。
最后,文件的重要部分如下所示:
config.h
********
/* Add #define _GNU_SOURCE to solve "'alphasort' undeclared" error */
#define _GNU_SOURCE
grib_keys.c
***********
#define _GNU_SOURCE
count = scandir(dir, &files, 0, alphasort);
答案 0 :(得分:3)
如果您要声明功能测试宏(例如_GNU_SOURCE
),则必须确保预处理器在看到使用它们的任何代码之前看到它们。这通常意味着必须在任何系统标头之前处理它们。因此,在任何#include
指令之前,最佳位置位于每个C源文件(不是标题)的顶部。
话虽如此,您需要一个适用于您实际使用的C库及其开发标题的解决方案。对于MinGW来说,它似乎是微软的C库,它似乎没有记录alphasort()
函数。
即使您使用的是glibc(例如Cygwin的版本),我的glibc文档声称alphasort()
所需的功能测试宏是_BSD_SOURCE
或_SVID_SOURCE
,而不是_GNU_SOURCE
。自glibc 2.10起,看起来最好使用_POSIX_C_SOURCE
> = 200809L
或_XOPEN_SOURCE
> = 700
,因为这些反映了这一事实该功能在POSIX.1-2008中标准化。