Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法编译ecepass.c_C_Gcc_Freebsd - Fatal编程技术网

无法编译ecepass.c

无法编译ecepass.c,c,gcc,freebsd,C,Gcc,Freebsd,我一生都不能编译这段旧代码。我正试图使用它来测试客户端的外部漏洞。我让它在FreeBSD11中运行,并用gcc编译。知道我为什么会犯这个错误吗 int in_cksum(u_short *addr, int len) { int sum; int nleft; u_short ans; u_short *w; sum = 0; ans = 0; nleft = len; w = addr; while (nleft &g

我一生都不能编译这段旧代码。我正试图使用它来测试客户端的外部漏洞。我让它在FreeBSD11中运行,并用gcc编译。知道我为什么会犯这个错误吗

int in_cksum(u_short *addr, int len)
{
    int sum;
    int nleft;
    u_short ans;
    u_short *w;

    sum = 0;
    ans = 0;
    nleft = len;
    w = addr;

    while (nleft > 1) {
      sum += *w++;
      nleft -= 2;
    }
    if (nleft == 1) {
      *(u_char *)(&ans) = *(u_char *)w;
       sum += ans;
    }
    return (sum);
}
完整代码如下:

错误:

在ecepass.c中包含的文件中:8:0: ecepass.c:72:5:错误:应为声明说明符或数值常量前的“…” 整数整和(整数短*地址,整数长度)

在PasteBin上发布的代码中,第8行(和第24行:d)有这样一句话:
\include

由于我不在尼克斯,我在互联网上搜索了该文件,找到了两个参考文献:

在这两种情况下(第40+行附近),cksum中的似乎是一个预处理器宏

#在(m,len)中定义(m,len)在(m,len,0)中跳过

将函数名(以及代码中引用函数的所有位置)更改为非宏的名称,或者实际上更改为另一个已定义的标识符,例如校验和(希望尚未定义:),您应该可以(也可以应用于其他函数)。
或者作为替代,删除machine/in_cksum.h包含(directindirect(通过其他嵌套包含)),但这可能会有点困难(而且,我没有检查所有代码以查看是否使用了包含中的其他函数)。

我想你忘了包含一些东西。。。joking@Stargateur你看过完整的资料来源了吗?他几乎囊括了所有的东西:)他两次囊括了一堆。是的,我意识到它在里面有两次。我把它们拿了出来,但这并没有改变错误。我有一个可怕的怀疑,我无法测试自己,因为我无法方便地访问FreeBSD 11。请将_cksum中的函数名更改为_cksum中的计算,然后尝试重新编译。(您还需要更改所有调用者以匹配。)如果这样可以修复它,我将解释。这允许它编译。非常感谢。我没有完全正确的细节,但“其中一个系统头在_cksum中定义为预处理器宏”是我可怕的怀疑。很多与*BSD特定的网络相关的头文件都没有考虑到名称空间的整洁性。@zwol:显然,这种怀疑只能从以下领域的大量经验中产生:)@CristiFati让我们说我仍然记得您必须终止SCSI链的所有三个位置。@sethh:这是否符合您问题的答案?