编译器忽略#定义"GNU"源 我不是以英语为母语的人,所以请原谅我的拼写或语法错误 我不是编译专家,也没有任何关于构建及其错误的有用经验 我是C#程序员,主要在MS环境中工作 我只知道3个“必须知道如何在Linux命令中生存”。/configure,make&makeinstall”来自我的Linux小体验 我的发展环境 我正在使用Windows 7工作站 使用Cygwin和MinGW(作为Linux的“替代品”)进行编译 问题
我想在windows上编译C源代码,它主要是为Linux发行版编写的。编译器忽略#定义"GNU"源 我不是以英语为母语的人,所以请原谅我的拼写或语法错误 我不是编译专家,也没有任何关于构建及其错误的有用经验 我是C#程序员,主要在MS环境中工作 我只知道3个“必须知道如何在Linux命令中生存”。/configure,make&makeinstall”来自我的Linux小体验 我的发展环境 我正在使用Windows 7工作站 使用Cygwin和MinGW(作为Linux的“替代品”)进行编译 问题,c,windows,compiler-errors,mingw32,C,Windows,Compiler Errors,Mingw32,我想在windows上编译C源代码,它主要是为Linux发行版编写的。 /“配置”可以正常工作。 如果我使用命令make编译源代码,我会遇到以下错误: 错误 grib_keys.c:50:34: 错误:“alphasort”未声明(此函数首次使用) 研究: 我的研究证明,这个问题已经解决了,但不幸的是,答案对我不起作用。 解决方案说,我只需要包括以下内容:#定义"GNU"源代码 我试过了,但正如前面所说的,它不起作用 我将其包含在以下文件中: - grib_keys.c - config.
/“配置”可以正常工作。
如果我使用命令make编译源代码,我会遇到以下错误: 错误
grib_keys.c:50:34:
错误:“alphasort”未声明(此函数首次使用)
研究: 我的研究证明,这个问题已经解决了,
但不幸的是,答案对我不起作用。
解决方案说,我只需要包括以下内容:#定义"GNU"源代码
我试过了,但正如前面所说的,它不起作用 我将其包含在以下文件中:
- 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);
我想获得的和想知道的:
- 我想编译下面命名的API的全部源代码,以便在windows操作系统上使用二进制文件李>
- 此外,我还想知道,我是否将“#define _GNU_SOURCE”-标记
写到了正确的位置,或者我是否犯了错误
如果要声明功能测试宏,如
\u GNU\u SOURCE
,则必须确保预处理器在看到使用它们的任何代码之前先看到它们。这通常意味着必须在处理任何系统头之前处理它们。因此,最好的位置是在每个C源文件(而不是标题)的顶部,在任何#include
指令之前
话虽如此,您需要一个应用于实际使用的C库及其开发头的解决方案。对于MinGW来说,这似乎是微软的C库,它似乎没有记录一个alphasort()
函数
即使您使用的是glibc(例如Cygwin的版本),我的glibc文档也声称
alphasort()
所需的特性测试宏要么是\u BSD\u SOURCE
要么是\u SVID\u SOURCE
,而不是\u GNU\u SOURCE
。自从glibc 2.10以来,似乎最好使用\u POSIX\u C\u SOURCE
=200809L
,或者\u XOPEN\u SOURCE
=700
,因为这反映了函数在POSIX.1-2008中被标准化的事实。尝试将-D\u GNU\u SOURCE
添加到编译器调用中(或者添加到CFLAGS
).也许MinGW根本没有实现这个功能?@cremno,我不确定OP的MinGW提供了什么版本的glibc,但glibc已经有了alphasort()
很长一段时间了。就像在《Glibc2》的每一个版本中一样,“有了Cygwin和MinGW”——这很可能就是问题所在。这两个是两个不同的产品,不需要同时使用。根据你的帖子,我想说你想使用Cygwin而不是MinGW(更多信息请参见)。@JohnBollinger:MinGW不使用glibc,Cygwin使用newlib(显然是实现它的)。\u GNU SOURCE
请求一切,包括发布glibc(或newlib)时最新的\u XOPEN\u源代码,因此,在cygwin中获得alphasort
声明就足够了。但是在mingw上没有用,这是主要的问题。实际上看起来mingw在\u GNU\u SOURCE
上运行良好,但是mingw64没有。。。