“复合语句末尾的标签”错误,MacPorts,CGMiner

时间:2013-08-19 02:03:17

标签: c macports

我正在尝试使用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命令或终端至少 - 我觉得这是一条脱离水的鱼,所以我所学到的一切都是我必须学习的做错了,然后努力学习。但是,我在网上看到这个错误是通过结束一个在函数的最后部分未解析的标签来解决的 - 也就是说,如果函数在默认情况下结束,则为休息;放在它和结束括号之间以解决错误。

但是,我尝试在#32def预处理器参数内的WIN32 #endif之后放置中断,然后在out之后直接放置它。所有这些都继续使编译器失败。对此有何解决方案?我觉得解决方案是盯着我的脸。

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

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

1 个答案:

答案 0 :(得分:1)

看来这个代码还没有在Windows以外的任何东西上编译!在Windows外部,#ifdef WIN32 ... #endif会消失,正如您所见,标签out:没有标注声明。

这可能是通过为非Windows案例明确添加null语句来解决的:

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

(已添加两行#else;。)