链接失败 [ilink32 错误] 致命:无法打开文件 'TYPES.OBJ'

Posted

技术标签:

【中文标题】链接失败 [ilink32 错误] 致命:无法打开文件 \'TYPES.OBJ\'【英文标题】:Linking fails [ilink32 Error] Fatal: Unable to open file 'TYPES.OBJ'链接失败 [ilink32 错误] 致命:无法打开文件 'TYPES.OBJ' 【发布时间】:2015-12-28 11:50:58 【问题描述】:

我一直在更新使用 C++ Builder 2010 构建的旧遗留项目的代码,以使用 C++ Builder 10 Seattle 进行编译。我主要不得不改变路径,很多 dupIgnoreTDuplicates::dupIgnore,重新导入一些组件,如 MSXMLMSMQ 等。

首先是主项目以bpl和dll的形式使用的一堆子项目,最后是主项目的代码编译。

但是...链接失败:P

[ilink32 Error] Fatal: Unable to open file 'TYPES.OBJ'

我试图查找有关潜在问题的信息,并且许多人提到确保在 Delphi 编译器 设置下的 Unit Scope 中提供System。但这已经存在于这个项目中。还有什么可能导致这种情况?

有关信息。目前使用“经典”bcc32 编译器编译。

包含路径:

$(BDSINCLUDE)\windows\vcl;$(BDSINCLUDE)\dinkumware;

库路径:

$(BDSLIB)\$(PLATFORM)\$(Config);$(BDSLIB)\$(PLATFORM)\Release\psdk;

【问题讨论】:

您可以尝试通过删除或评论来刷新包含 (.h) 和编译指示 (.cpp) 列表。当您保存时,它们会再次自动生成。编译exe后确实会出现链接器错误,对吧? 我不确定我理解您所说的“列表”是什么意思?我猜你只是指正常的包含和编译指示指令?如果这就是您的意思,它们在很多文件中都有很多。当您包含来自各地的文件时,ide 怎么知道要“重新创建”哪些文件? 很抱歉描述不准确。当您将组件放在表单上时,会自动添加一些 include 和 pragma 指令。当我将一个较旧的应用程序移植到 XE2 时,我遇到了这个问题,因为一些包含指令发生了变化。 在你的项目文件中提到的 types.obj 文件在哪里? 当从一个版本的开发环境转换到另一个版本时,删除项目文件(到某个安全的地方以防你想调用它)并让环境创建一个新的有时会清理一些可能导致链接问题的问题;如果您还没有尝试过。 【参考方案1】:

我会先听从 Tim D 的建议。每当我开始使用较新版本的编译器时,90% 的旧项目导入是由于我直接包含代码/头文件/对象文件并创建一个空白版本,然后在 99% 的时间里复制它来修复它。

在确保数据是新创建的,然后在其上导入旧数据后,我会检查遗留的不兼容问题。通过更改“列表”,您走在了正确的道路上。我还建议您确保为新编译器重写所有代码。这有助于代码兼容性和简化运行已完成项目的过程。

最后,我会检查您的所有额外数据(不是纯代码的文件,例如头文件)是否仍可被当前使用的编译器识别。 (旧版可能会导致这很挑剔。)

【讨论】:

【参考方案2】:

看起来编译器正在获取 TYPES.OBJ 但无法打开,因为这可能由于多种因素而发生(例如 C++ 依赖于平台.. TYPES.cpp 可能构建在不同的操作系统中)您可以肯定地解决问题我正在构建 TYPES.cpp .. 还要注意这个 CPP 正在导入的库应该是可兼容的//如果您仍然收到错误,请继续完整构建.. 或者检查 link.rsp 或使用 nm 命令查找依赖对象和全部构建。

【讨论】:

【参考方案3】:

我认为你应该在项目的所有文件中找到字符串 TYPES.OBJ,在你需要从找到的文件中删除这个字符串之后。在此之前不要忘记备份项目目录。

当我将旧项目从 BCB5 转换为 BCB 6 时,我遇到了类似的问题。当我从扩展名为“.bpr”的项目文件中删除带有“.obj”文件名的字符串时,我的问题就解决了。

Project1.bpr 项目文件中的字符串如下:

<OBJFILES value="Unit1.obj Types.obj"/>

修改后:

<OBJFILES value="Unit1.obj"/>

【讨论】:

【参考方案4】:

对我来说,我在 Delphi 中包含了 Spin,这导致了错误 ilink64 error fatal: unable to open file 'vcl.samples.spin.o'

所以我删除了 Spin 并在 Pascal 代码中包含了 Vcl.Samples.Spin 并且链接器很满意。此错误仅在 C++ Builder 上引起,而不是在 Delphi 中。

【讨论】:

以上是关于链接失败 [ilink32 错误] 致命:无法打开文件 'TYPES.OBJ'的主要内容,如果未能解决你的问题,请参考以下文章

链接:致命错误 LNK1181:无法打开输入文件“zz.exe”

链接:致命错误 LNK1104:无法打开文件 'ucrt.lib'

链接:致命错误 LNK1104:无法打开文件“SDL.lib”

如何摆脱VS 13中的错误“链接:致命错误LNK1104:无法打开文件'LIBC.lib'”?

致命错误LNK1104:无法打开文件'gdi32.lib'

链接:致命错误 LNK1104:无法打开文件“Iphlpapi.lib”