将Borland C++ Builder 6项目迁移至10.2.3时遇[ilink32 Error]无法打开FORMS.OBJ
[ilink32 Error] Fatal: Unable to open file 'FORMS.OBJ'的排查方向 我帮你梳理几个针对性的排查方向,应该能定位并解决这个链接错误:
检查VCL库引用路径是否正确
C++ Builder 10.2.3的VCL库路径和BCB6差异很大,旧项目的路径残留很可能导致链接器找不到标准库文件。你可以打开Project > Options > C++ Linker > Library path,确认路径指向10.2.3的标准库目录(比如$(BDS)\lib\win32\release),同时删掉所有BCB6相关的旧路径。排查链接器输入设置的隐含引用
有时候源码里没写,但项目配置里可能偷偷加了对FORMS.OBJ的引用。去Project > Options > C++ Linker > Input看看,有没有在Additional dependencies里手动添加了这个文件,或者有没有旧项目配置残留的无效条目。另外也检查下Use dynamic RTL和Link with runtime packages的设置,这些选项的变化会影响链接库的查找逻辑。确认表单文件的编译状态
确保所有.dfm和对应的.cpp/.h表单文件都正确添加到项目中,而且没被排除编译。在项目管理器里右键表单文件,查看Properties里的Type是不是Form,Excluded from build有没有被勾选。另外,BCB6的.dfm格式和10.2.3有细微差别,你可以右键表单选择View as Text,检查有没有旧的奇怪指令,保存后重新编译试试。清理缓存后完全重新构建
迁移项目后旧的编译缓存(比如.obj、.tds这些临时文件)很容易搞事情,导致链接器找错文件。先执行Project > Clean,然后手动删掉项目目录下的所有*.obj、*.tds、*.ilc、*.ils文件,最后用Project > Build(不要用Incremental Build)从头编译整个项目。检查第三方组件/自定义库的依赖
如果项目用了第三方组件,它们可能依赖旧版本的VCL文件。确认这些组件已经升级到支持10.2.3的版本,并且它们的库路径也更新到了新位置。另外,如果你有自己写的静态库或动态库,也要检查里面是不是硬编码了对FORMS.OBJ的引用,需要重新编译这些库适配新环境。对比新项目模板的默认配置
新建一个干净的10.2.3 VCL项目,把它的项目设置和你的迁移项目做对比,重点看Linker、Library paths、Compiler这几个板块的选项。把迁移项目的配置逐步调整到和新项目一致,排除配置差异带来的问题。
内容的提问来源于stack exchange,提问作者T.Mineo




