模块ilink32.dll中的访问冲突

时间:2014-11-14 11:32:59

标签: c++ linker c++builder

我有一个巨大的C ++ Builder 6解决方案,当我尝试编译它时,当链接器开始工作时我得到以下错误:

Error in german

它转换为:

---------------------------
Fehler
---------------------------
Access violation at address 0660EE22 in module 'ilink32.dll'. Reading from address 00000000.
---------------------------
OK   
---------------------------

有谁知道这是怎么来的以及我如何解决它?

编辑1

重要提示,当我重置工作副本然后只修改sublime文本中的内容并仅使用C ++ Builder进行编译时,代码有时会编译。包括,我不打开单个文件。

编辑2

更多细节,该项目有大约80.000.000行代码(根据C ++ Builder)。最大的文件大约是70.000行,但你不能说清楚,因为有很多

#ifdef XY
#endif

的东西。

代码本身是来自现有部分的复制粘贴,并得到了一些同事的审核。所以我认为这是C ++ Builder中的一个错误,因为如果我只使用Sublime Text或Notepad ++来编辑这些东西然后使用C ++ Builder来构建它,它确实有效,它起作用(至少有时候)。

说实话,我自己并不认为有一个真正的解决方案。但我希望有人知道这个错误。根据谷歌的说法,ilink32.dll是一个自动链接的C ++ Builder库。

也许某人有解决方案。

1 个答案:

答案 0 :(得分:1)

ilink32总是有很多错误。在非当前版本中无法修复任何内容,因此您可以选择:

  • 寻找QC的解决方法
  • 找到自己的解决方法

Here are一些对您有用或可能没用的QC搜索。

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的实际链接命令,看看其中是否有任何不必要的目标文件或库。您可以删除并重新创建项目文件,因为随着项目的开发,它们会随着时间的推移而积累起来。实际上,无论如何这可能是一个好主意。

另一种可能性是将一些代码分组到静态库中。

在所有情况下,请确保您使用良好的源代码控制,以便您可以撤消任何可能导致更糟糕的失败选项