链接失败 [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 进行编译。我主要不得不改变路径,很多 dupIgnore
到 TDuplicates::dupIgnore
,重新导入一些组件,如 MSXML 和 MSMQ 等。
首先是主项目以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”