0

我正在尝试使用 MacPorts 在 OS X 上安装 cgminer。从一开始就麻烦不断,但有了适当的工具、常识和互联网,我已经走到了这一步。本质上,sudo make install上的编译堵塞表明 util.c 的第 956 行出现堵塞 - 这是终端输出的文本:

   CC       cgminer-cgminer.o
   CC       cgminer-util.o
util.c: In function ‘nanosleep_abstime’:
util.c:956: error: label at end of compound statement
make[1]: *** [cgminer-util.o] Error 1
make: *** [install-recursive] Error 1

以下是在 Xcode 4.6.3 中打开的 util.c 的 cgminer 副本的内容,在 nano sleep_abstime 进行裁剪,并在第 956 行插入了注释:

static void nanosleep_abstime(struct timespec *ts_end)
{
     uint64_t now_ns, end_ns, diff_ns;
     struct timespec ts_diff;
     struct timeval now;

     end_ns = timespec_to_ns(ts_end);
     gettimeofday(&now, NULL);
     now_ns = timeval_to_ns(&now);
     if (unlikely(now_ns >= end_ns))
        goto out;
     diff_ns = end_ns - now_ns;
     ns_to_timespec(&ts_diff, diff_ns);
     nanosleep(&ts_diff, NULL);
out:
#ifdef WIN32
     timeEndPeriod(1);
#endif
} // LINE 956
#endif

现在,我对 Unix/Linux 命令或终端在任何方面、形状或形式上都不熟悉——我觉得自己像一条离开水的鱼,所以我所学到的一切我都必须通过做错来学习然后艰难地学习。但是,我在网上读到,这个错误是通过结束一个在函数的最后部分未解决的标签来解决的——也就是说,如果函数在默认情况下结束:,a break; 被放置在它和端大括号之间以解决错误。

但是,我尝试将 break 放在 WIN32 #endif 之后、#ifdef 预处理器参数内,并在它之前,直接在 out: 之后。所有继续使编译器失败。有什么解决方案吗?我觉得解决方案正盯着我看。

这是我的设置的相关配置/版本信息:

OS X 10.8.4 (12E55)
Xcode 4.6.3 w/ Command Line Tools installed
MacPorts version 2.2.0
4

1 回答 1

1

似乎除了 Windows 之外,这段代码还没有在任何东西上编译过!在 Windows 之外,#ifdef WIN32...#endif消失了,并且如您所见,out:留下的标签没有声明要标注。

这可能是通过添加一个空语句来最清楚地解决的,明确地用于非 Windows 情况:

out:
#ifdef WIN32
    timeEndPeriod(1);
#else
    ;
#endif
}

(这两行#else;已添加。)

于 2013-08-19T08:59:32.287 回答