我正尝试在Windows上编译OpenMP代码。链接器选项/stack:10000000和/largeaddressaware应该被添加,以避免堆栈溢出错误。它们没有被识别。我认为/largeaddressaware可能是不必要的,因为我使用的是64位编译器。但我确实需要使/stack工作。
我正在使用“英特尔oneAPI command prompt for Intel 64 for Visual Studio 2022”和英特尔Fortran进行编译。我不清楚如何添加/stack标志,但我尝试了以下操作:
ifort -c modules.f90
ifort -c MainCode.f90 /openmp /STACK:10000000 /LARGEADDRESSAWARE
ifort modules.obj MainCode.obj -o Code.exe /openmp /STACK:10000000 /LARGEADDRESSAWARE
我得到的是,
C:\Users\e\Desktop\code>ifort -c modules.f90
Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.6.0 Build 20220226_000000
Copyright (C) 1985-2022 Intel Corporation. All rights reserved.
C:\Users\e\Desktop\code>ifort -c MainCode.f90 /openmp /STACK:10000000 /LARGEADDRESSAWARE
Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.6.0 Build 20220226_000000
Copyright (C) 1985-2022 Intel Corporation. All rights reserved.
ifort: command line warning #10006: ignoring unknown option '/STACK:10000000'
ifort: command line warning #10006: ignoring unknown option '/LARGEADDRESSAWARE'
C:\Users\e\Desktop\code>ifort modules.obj MainCode.obj -o Code.exe /openmp /STACK:10000000 /LARGEADDRESSAWARE
Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.6.0 Build 20220226_000000
Copyright (C) 1985-2022 Intel Corporation. All rights reserved.
ifort: command line warning #10006: ignoring unknown option '/STACK:10000000'
ifort: command line warning #10006: ignoring unknown option '/LARGEADDRESSAWARE'
Microsoft (R) Incremental Linker Version 14.33.31629.0
Copyright (C) Microsoft Corporation. All rights reserved.
-out:Code.exe
-subsystem:console
-defaultlib:libiomp5md.lib
-nodefaultlib:vcomp.lib
-nodefaultlib:vcompd.lib
modules.obj
MainCode.obj
我是否可以使用其他命令来代替?或者我是否使用了错误的/stack?
我尝试了大写/STACK和小写/stack,但都不起作用。我还尝试了大地址感知,因为我在某个地方找到了它,但也不起作用。我也尝试了/stack 10000000
,但没有成功。
1条答案
按热度按时间bis0qfac1#
您必须将
/link
(小写)放在链接器选项(如/stack
和/largeaddressaware
)之前的行上。这会告诉编译器驱动程序将它们传递给链接器。设置一个非常大的堆栈保留值有一个缺点,因为这会减少Windows为静态代码和数据分配的2GB空间,加上Windows本身使用的一些空间。这个限制也适用于64位Windows!与其从一个非常大的值开始,不如从1000000开始,然后从那里继续增加。