2013-10-07 78 views
1

我正在使用GCC ver-4.6.4(Mac和Linux Mint 15)來編譯我爲研究所做的代碼。無法識別-a選項`ck_size'

我使用的命令是:

gfortran -O2 -fopenmp -Wl,-stack_size,1000000 <...Lots of files...> -o a.out 

,在這裏我忽略了實際的文件名。

此代碼編譯在Mac OK,但我得到了薄荷以下錯誤:

/usr/bin/ld: unrecognized -a option `ck_size' 
collect2: error: ld returned 1 exit status 
make[1]: *** [a.out] Error 1 

薄荷,這將編譯,如果我不使用任何標誌可言,所以這個問題是有關的OpenMP 。

但是,我確實需要OpenMP,並且不明白它在錯誤中說了什麼,因爲我沒有'ck_size'。順便說一句,刪除-O2沒有幫助。

+1

請注意,OS X上主線程的最大堆棧大小爲64 MB。其他OpenMP線程可能有非常大的堆棧,但主線程不能。 –

回答

3

該問題與OpenMP無關,它與您的不同操作系統有關。

-stack_size是Macintosh專用的,指的是堆棧上陣列的最大尺寸。 Linux通過終端命令ulimit更改堆棧大小(檢查您的Mint設置類型,ulimit -a以查看所有內容,堆棧大小可用ulimit -s查看,有關更多信息,請參閱ulimit man page)。

因此,您需要從您的編譯器標誌中取消整個-stack_size,100000部分,這在Linux中沒有任何意義。

1

您將-Wl,-stack_size,1000000傳遞給gfortran,gfortran將選項「-stack_size 1000000」傳遞給鏈接器ld。它將「st」解釋爲單個字母選項「-s」和「-t」,然後將下一個字母作爲選項「-a」和其餘字(「ck_size」)作爲參數進行讀取。

我找不到ld-stack_size選項。它看起來像選項是--stack,所以你需要把類似-Wl,--stack,1000000的東西。

+0

'-Wl, - stack,1000000'不起作用,仍然無法識別;我的原始代碼'-Wl,-stack_size,1000000'來自Apple的建議[Customizing Process Stack Size](https://developer.apple.com/library/mac/qa/qa1419/_index.html),並且適用於mac只有我想。 – warriormole