不兼容的编译错误内置函数'execl'

时间:2011-11-05 17:16:31

标签: c

我正在使用cywin在windows上编译crashme源代码,我正面临一些编译错误。

错误:

crashme.c: In function 'vfork_main':
crashme.c:594: warning: incompatible implicit declaration of built-in function ‘execl’

虽然源代码包含了unistd.h,但仍然存在错误。请帮助我解决这个问题。

3 个答案:

答案 0 :(得分:3)

可能缺少#include “system”标头定义execl(即Linux上的<unistd.h>)。

要了解其中包含的内容,请使用gcc -H -c foo.c并使用gcc -C -E -Wall foo.c > foo.i获取预处理表单。

答案 1 :(得分:1)

包含unistd.h

我无法打开crashme.zip,但我能够部分解包crashme.tgz

crashme.c有以下内容(第150-152行):

#ifdef linux
#include <unistd.h>
#endif

您正在编译Cygwin,它不是 Linux系统,所以当然没有定义符号linux。因此,会跳过#include <unistd.h>

这是令人惊讶的,因为<unistd.h>应该可用于所有类Unix系统(即POSIX),而不仅仅是Linux - 并且源代码中的注释表明它已在SunOS 4.1.1和其他几个系统上使用Unix系统。

评论#ifdef linux#endif行应解决当前问题,但我不知道其背后可能存在哪些其他问题。要在Cygwin下工作,需要花费一些未知的努力。

答案 2 :(得分:0)

我最近更新了http://crashme.codeplex.com/源代码以使用Xcode命令行工具在Mac OS X Lion上工作,并进行了更改以使其在64位x64架构上更有效。但在Windows下我建议使用本机Windows端口而不是cygwin,使用预编译的Windows安装程序msi文件。您可以在codeplex站点上报告错误/问题。