回 帖 发 新 帖 刷新版面

主题:编译固定格式.f文件出现image may not run

固定格式.f文件,在编译连接的时候出现下列错误提示
ebug/w4456center.exe : warning LNK4084: total image size 1521692672 exceeds max (268435456); image may not run
这个怎么处理,从来没有遇到过这样的提示,怀疑是跟固定格式有关
但是我的代码都没有超过它规定的列数范围啊

回复列表 (共4个回复)

沙发

参考以下帮助信息

简单的说,就是你编译以后的镜像(exe等)文件太大了,可能无法运行。

早期的操作系统对 exe 的大小有限制。但 NT 以后就没有这个约束了。

如果你想解除这个警告,可以尝试把较大的数组改为可分配数组。而不是静态数组。

[quote]
Q1019 - Linker warning: "LNK4084 - total image size exceeds max (268435456); image may not run"

Platforms: All
Versions: All
Fixed in version: N/A
Article created: 08 June 1998
Article revised: 16 September 2002

Description: When linking an application which contains large arrays, the linker gives the warning "LNK4084 - total image size exceeds max (268435456); image may not run".

Explanation: Windows 95 and Windows NT 4.0 have a limit for the total size of static code and data of 256MB. If the amount of static code and data exceeds this size, the image may not execute. This is a limitation in the operating system and not in Visual Fortran or its tools. The most common cause of large static data is large local or COMMON arrays. The linker issues an informational warning in this case to alert you of the potential problem.

However, if the actual image size is displayed as a negative value, that means that the image size exceeds 2GB and your program will not run on any version of 32-bit Windows.

Solution: For Windows NT 4.0, install Microsoft's Windows NT Service Pack 3 (or later). This raises the limit on static code and data to 1.75GB. However, the linker is not modified by this update and will continue to issue the warning, which can be ignored. The limit on Windows 98, Windows 2000 and Windows XP is 1.75GB, the same as Windows NT 4.0 with Service Pack 3 - if your application will be not be running on Windows 95, or on Windows NT 4.0 prior to SP3, and the actual image size is not displayed as a negative value, you can ignore this message.

For Windows 95, Microsoft has not released an update which raises the limit.

If you wish to prevent the message from being issued when you link, select Project..Settings..Link. At the end of the Project Options box, type in:

/ignore:4084

An alternative is to make the large arrays ALLOCATABLE. Dynamically allocated data is not subject to the 256MB limit.

Example #1: Local array

Old:

REAL BIG_ARRAY(1000,1000,500) !500MB

New:

REAL,ALLOCATABLE :: BIG_ARRAY(:,:,
...
ALLOCATE (BIG_ARRAY(1000,1000,500))
! ALLOCATE statement goes in executable
! part of program

Example #2: Common array

Old:

! Include file declaring COMMON array
REAL BIG_ARRAY(1000,1000,500) !500MB

New:

! New source file containing MODULE as follows
MODULE BIG_STUFF
REAL,ALLOCATABLE::BIG_ARRAY(:,:,
END MODULE BIG_STUFF

! Add to routines using BIG_ARRAY
USE BIG_STUFF

! Add to main program
USE BIG_STUFF
...
ALLOCATE (BIG_ARRAY(1000,1000,500)

Note that USE statements must immediately follow PROGRAM, SUBROUTINE or FUNCTION statements. For more information on MODULE, USE and ALLOCATABLE arrays, see the Language Reference Manual.[/quote]

板凳

谢谢雪球。但我没有开辟大数组,同时我用的基本都是allocatable来定义数组的啊
还有就是若我有use imsl,则这个链接警告必然就会出现。

还有我的操作系统是windowsxp。我以前编译.f90程序的时候从来都没出现过这种错误。
就是目前有一个.f固定格式的程序,编译就会出现这个错误。当然在我没有使用use imsl的时候,这个链接警告也出现了

3 楼

这就很难说了,你看看你编译以后的 exe 有多大?

再仔细检查检查,应该会有较大的数组存在。否则不会这么大的exe 的

4 楼

仔细检查了,还是没有找到原因。生成的exe是640kB,好像我只要在原来.f的基础上加上一些代码,再编译就会出现上述warning。

我来回复

您尚未登录,请登录后再回复。点此登录或注册