2013-08-19 51 views
0

我試圖在OS X上使用MacPorts安裝cgminer。從一開始,它就一直是個麻煩事,但通過適當的工具,常識和互聯網,我已經能夠實現這一目標。從本質上講,對須藤編譯堵塞讓安裝表明在線路util.c的956卡紙 - 這裏是終端輸出的文本:「複合語句結束時的標籤」錯誤,MacPorts,CGMiner

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 

這裏是UTIL的cgminer副本內容。下在的Xcode 4.6.3帶有註釋插入指定線956打開時,在納米sleep_abstime裁剪和:

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命令或終端在至少 - 我覺得自己像一條魚,所以我學到的所有東西都是錯誤的,然後學習的困難的方式。然而,我在網上讀到,這個錯誤是通過結束一個在函數的最後部分未解析的標籤來解決的 - 也就是說,如果該函數在默認情況下結束了:,休息;被放置在它和末端支架之間以解決錯誤。

但是,我試過在#ifdef預處理器參數中放置WIN32 #endif之後的break,並且在out之後直接放置:所有編譯器都繼續失敗。任何解決方案?我覺得解決方案正在把我凝視在臉上。

這是我設置的相關配置/版本信息:

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

回答

1

看來,這個代碼沒有被編上除Windows任何東西!在Windows之外,#ifdef WIN32 ... #endif會蒸發,正如您所看到的,標籤out:沒有標籤聲明。

這可能是最清楚通過添加一個空語句,明確對非Windows的情況下,固定:(兩線#else;已添加)

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

+0

應該」我看到一個人......最近一直在研究3個comps,一個Mac,一個Ubuntu和一個Windows,所以這個錯誤並沒有像往常那樣發生,我很傻。 – ecfedele