我有一个巨大的C ++ Builder 6解决方案,当我尝试编译它时,当链接器开始工作时我得到以下错误:
它转换为:
---------------------------
Fehler
---------------------------
Access violation at address 0660EE22 in module 'ilink32.dll'. Reading from address 00000000.
---------------------------
OK
---------------------------
有谁知道这是怎么来的以及我如何解决它?
重要提示,当我重置工作副本然后只修改sublime文本中的内容并仅使用C ++ Builder进行编译时,代码有时会编译。包括,我不打开单个文件。
更多细节,该项目有大约80.000.000行代码(根据C ++ Builder)。最大的文件大约是70.000行,但你不能说清楚,因为有很多
#ifdef XY
#endif
的东西。
代码本身是来自现有部分的复制粘贴,并得到了一些同事的审核。所以我认为这是C ++ Builder中的一个错误,因为如果我只使用Sublime Text或Notepad ++来编辑这些东西然后使用C ++ Builder来构建它,它确实有效,它起作用(至少有时候)。
说实话,我自己并不认为有一个真正的解决方案。但我希望有人知道这个错误。根据谷歌的说法,ilink32.dll
是一个自动链接的C ++ Builder库。
也许某人有解决方案。
答案 0 :(得分:1)
ilink32总是有很多错误。在非当前版本中无法修复任何内容,因此您可以选择:
AFAIK无法使用其他链接器。但是,您可以通过项目选项打开(或关闭)增量链接,看看是否有所作为。增量链接是一种速度优化,它对链接的语义没有任何影响。
该项目有大约80.000.000行代码(根据C ++ Builder)。
那么,这个数字会计算每个源文件的预编译头文件中的所有行,所以可能并不重要。
对于一个源文件,70K LOC很大;也许你可以尝试重构代码以获得更小的目标文件,特别是如果它似乎确实添加到一个大文件确实会引发问题。
有可能确定您正在进行的更改是否会触发错误。例如,它可能会增加超过某个限制的特定事物(例如,一个目标文件的大小,目标文件的数量,静态数据的大小等)
您可以删除在BCB6 lib目录中默认构建和保存的预编译头文件(即vclNN.csm,vclNN。#00,vclNN。#01等)。也许他们已经腐败或者可以更好地重建。无论如何,BCB6中的PCH管理很困难。 (我最终定义了自己的“all.h”并让每个源文件都#include "all.h"
#pragma hdrstop
)。更高版本的CBB XE允许PCH注入使这个过程更加整洁。
查看传递给ilink32的实际链接命令,看看其中是否有任何不必要的目标文件或库。您可以删除并重新创建项目文件,因为随着项目的开发,它们会随着时间的推移而积累起来。实际上,无论如何这可能是一个好主意。
另一种可能性是将一些代码分组到静态库中。
在所有情况下,请确保您使用良好的源代码控制,以便您可以撤消任何可能导致更糟糕的失败选项