1

我正在使用 GCC ver-4.6.4(在 Mac 和 Linux Mint 15 中)来编译我为研究而做的代码。

我使用的命令是:

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

,我省略了实际的文件名。

此代码在 Mac 中编译正常,但在 Mint 中出现以下错误:

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

在 Mint 中,如果我根本不使用任何标志,这将编译,因此这个问题与 OpenMP 有关。

但是,我确实需要 OpenMP 并且不明白它在错误中所说的内容,因为我没有“ck_size”。顺便说一句,删除 -O2 没有帮助。

4

2 回答 2

4

该问题与 OpenMP 无关,它与您的不同操作系统有关。

-stack_size特定于 Macintosh,指的是堆栈上数组的最大大小。Linux 通过终端命令更改堆栈大小ulimit(要检查您的 Mint 设置类型,ulimit -a查看所有内容,堆栈大小可以通过 来查看,有关更多信息ulimit -s,请参见ulimit 手册页)。

因此,您需要-stack_size,100000从编译器标志中删除整个部分,这在 Linux 中没有任何意义。

于 2013-10-08T01:02:28.457 回答
1

您传递-Wl,-stack_size,1000000给 gfortran,它将选项“-stack_size 1000000”传递给链接器 ld。它将“st”解释为单字母选项“-s”和“-t”,然后读取下一个字母作为选项“-a”,并将单词的其余部分(“ck_size”)作为其参数。

我找不到-stack_sizeld. 看起来选项是--stack,所以你需要放类似的东西-Wl,--stack,1000000

于 2013-10-07T22:45:48.133 回答