“无法执行链接"在RAD Studio XE8中编译时出错 [英] "Unable to perform link" error when compiling in RAD Studio XE8

查看:144
本文介绍了“无法执行链接"在RAD Studio XE8中编译时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即使我以管理员身份运行IDE,编译器也会给我一个错误(如图所示).谁能帮助解决问题?

The compiler is giving me an error (shown in the pic) even if I run the IDE as an administrator. Can anyone help to solve the problem?

推荐答案

您的链接器正在尝试分配128 MB内存.来自Embarcadero的以下信息是最近在Embarcadero论坛上发布的:

Your linker is trying to allocate 128 MB of memory. The following info from Embarcadero was recently posted on the Embarcadero forums:

在西雅图10更新1中检测到错误(LME288)

错误是内存不足"错误. 内存不足"的原因 链接器中的错误(以不同的方式出现)是链接器 必须在连续堆中预分配内存,然后将其用作 链接,过去这些堆无法调整,我们必须尽力而为 猜猜,所以在新的64位链接器中(并且也已添加到32位 链接器),我们允许人们能够手动调整这些堆的大小 当他们需要的时候.现在这些堆可能会出现问题的原因是 并非所有系统都是相同的,有些人使用不同的软件来映射 DLL链接器地址空间中的DLL,例如Windows Hook DLL,防病毒 所有这些DLL的软件都会在链接器的内部(任何应用程序 确实)地址空间,因此会对堆的大小产生影响 链接器可以分配.因此,我们添加了此功能,可以手动调整堆, 但是我们也分配了很大的初始堆.

The error is an "out of memory", error. The reason for "Out Of Memory" errors (which come in different guises) in the linker, is that the linker has to pre-allocate memory in contiguous heaps that it then uses as it links, in the past these heaps could not be adjusted, we had to do a best guess, so in the new 64-bit linker (and has also been added to the 32-bit linker) we allowed people to be able adjust the size of these heaps manually when they needed to. Now the reason why these heaps can be problem is that not all systems are the same, some people use different software that map DLLs into the linker's address space like Windows Hook DLLs, antivirus software all these DLLs allocate memory INSIDE the linker's (any application really) address space and hence has an impact on the size of the heaps the linker can allocate. So we added this ability to adjust the heaps manually, but we also allocated the initial heaps quite big .

32位链接器具有一个新开关-GH ,请参见下面的内容,类似于 ilink64开关.

The 32bit linker has a new switch -GH, see below this is similar to the ilink64 switch.

该开关的语法为:

-GH ="

此选项-GH从XE3 Update 1开始存在,但是显然没有记录?

This option -GH exists from XE3 Update 1 onwards but evidently is not documented?

要查看哪个堆内存不足,可以从命令行尝试.

To see which heap is out of memory you can try from command line.

MSBuild/p:Platform = Win32/v:diag XXXX.cbproj

MSBuild /p:Platform=Win32 /v:diag XXXX.cbproj

这提供了其他信息,例如:

This provides additional information such as:

在链接器堆上溢出:代码

Overrun on linker heap: code

链接器堆

信息0x002d0000 0x0a000000

info 0x002d0000 0x0a000000

代码0x000d0000 0x00100000

code 0x000d0000 0x00100000

数据0x00030000 0x08000000

data 0x00030000 0x08000000

bss 0x08000000 0x08000000

bss 0x08000000 0x08000000

致命:内存不足

以上输出的左侧是正在使用的字节数 此时,在右侧,为特定名称分配的字节数 堆.

The left side of the above output is number of bytes being used at the moment and on the right the number of bytes allocated for the specific named heap.

链接器在启动时分配的默认堆大小为:

The default heap sizes the linker allocates at start up are:

系统",默认大小为0x08000000
信息",默认大小为0x0A000000
代码",默认大小为0x08000000
"rodata",默认大小为0x06000000//只读数据
数据",默认大小为0x08000000
"bss",默认大小为0x08000000
"tds",默认大小为0x0FA00000

"system", default size 0x08000000
"info", default size 0x0A000000
"code", default size 0x08000000
"rodata", default size 0x06000000 //readonly data
"data", default size 0x08000000
"bss", default size 0x08000000
"tds", default size 0x0FA00000

当您看到未知堆"时,通常是"tds"堆

When you see the "unknown heap" this is normally the "tds" heap

将tds堆从0x0FA00000调整为0x0A000000的示例,您将执行-GHtds = 0x0A000000

Example to adjust tds heap from 0x0FA00000 to 0x0A000000 you would do -GHtds=0x0A000000

希望此信息对LME288错误有帮助.

Hopefully this information helps you and others with the LME288 error.

您可以在项目选项"中为链接器指定其他标志,例如-GH.

You can specify additional flags, such as -GH, for the linker in your Project Options.

这篇关于“无法执行链接"在RAD Studio XE8中编译时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆