Visual Studio ifort:命令行警告#10006:忽略未知选项“/STACK:10000000”

new9mtju  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(167)

我正尝试在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,但没有成功。

bis0qfac

bis0qfac1#

您必须将/link(小写)放在链接器选项(如/stack/largeaddressaware)之前的行上。这会告诉编译器驱动程序将它们传递给链接器。
设置一个非常大的堆栈保留值有一个缺点,因为这会减少Windows为静态代码和数据分配的2GB空间,加上Windows本身使用的一些空间。这个限制也适用于64位Windows!与其从一个非常大的值开始,不如从1000000开始,然后从那里继续增加。

相关问题