我正在使用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没有帮助。
答案 0 :(得分:3)
问题与OpenMP无关,它与您的不同操作系统有关。
-stack_size
特定于Macintosh,并且指的是堆栈上数组的最大大小。 Linux通过终端命令ulimit
更改堆栈大小(要检查您的Mint设置类型,ulimit -a
以查看所有内容,可以使用ulimit -s
查看堆栈大小,请参阅{{3} }了解更多信息)。
因此,您需要从编译器标志中删除整个-stack_size,100000
部分,这在Linux中没有任何意义。
答案 1 :(得分:1)
您将-Wl,-stack_size,1000000
传递给gfortran,后者将选项“-stack_size 1000000”传递给链接器ld。它将“st”解释为单个字母选项“-s”和“-t”,然后将下一个字母作为选项“-a”读取,将其余单词(“ck_size”)作为参数读取。
我找不到-stack_size
的{{1}}选项的引用。看起来该选项为ld
,因此您需要添加类似--stack
的内容。