我正在使用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 无济于事。
OpenMP 无关,它与您的不同操作系统有关。
-stack_size
特定于 Macintosh,指的是堆栈上数组的最大大小。Linux 通过终端命令 ulimit
更改堆栈大小(要检查您的 Mint 设置类型,ulimit -a
查看所有内容,堆栈大小可以通过 ulimit -s
查看,有关更多信息,请参阅 ulimit 手册页(。
因此,您需要从编译器标志中废弃整个-stack_size,100000
部分,这在 Linux 中没有任何意义。
您将-Wl,-stack_size,1000000
传递给 gfortran,后者将选项"-stack_size 1000000"传递给链接器 ld。它将"st"解释为单个字母选项"-s"和"-t",然后将下一个字母读取为选项"-a",并将单词的其余部分("ck_size"(作为其参数。
我找不到对ld
-stack_size
选项的引用.看起来该选项是 --stack
,因此您需要放置类似-Wl,--stack,1000000
的东西。