所以我重新编译了一个完美且工作的项目,突然我得到的只是这个链接器错误:
[ilink32 Error] Fatal: Unable to open file 'DATA.BIND.OBJECTSCOPE.OBJ'
该项目是一个启用了 VCL 的 C++ 控制台应用程序,我不知道
DATA.BIND.OBJECTSCOPE.OBJ
来自哪里。
这些是我正在使用的标题。
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <vector>
#include <vcl.h>
#include <System.hpp>
#include <System.IOUtils.hpp>
#include <System.Zip.hpp>
#include <System.Classes.hpp>
#include <System.IniFiles.hpp>
我尝试进行完整的光盘清理,删除所有临时文件等...没有变化... 这个项目昨天编译得很好。
我在 Embarcadero bug tracker 上找到了这个解决方案:
将以下内容添加到您的源文件之一
#if defined(_WIN32) && !defined(_WIN64)
#pragma link "Data.Bind.ObjectScope.obj"
#endif
原始解决方案已在此处提供。 https://plus.google.com/103589122222763968447/posts/gSwPfUZLPEH
如果其他人偶然发现这个非常令人沮丧的问题,我会在此处添加此内容。
我遇到了这个问题。当我将
REST.Client.hpp
包含在使用 C++ Builder 的 Embarcadero RAD Studio 项目中时,就发生了这种情况。经过一些浪费时间后,我最终将 REST 客户端组件放到了 GUI 设计器表单上。繁荣。作品。正是这个网站带领我走上了正确的道路。
它表示当您将组件放入表单时,#pragma 链接条目会自动包含在源文件中。
根据我的经验,这是当您的项目使用的库或控件决定它需要
DATA.BIND.OBJECTSCOPE
时引起的(例如,由于 Delphi 代码中的 uses
子句或 C++Builder 代码中的 #pragma link
)。
一个快速但一点也不优雅的修复:
.lib
文件包含此 .obj
文件。 (您可以通过转到 RAD Studio 和您正在使用的任何第三方库的库目录并 grep 查找 .obj
文件名来完成此操作,或者 TLIB 命令可以在 .obj
中列出 .lib
文件.).cbproj
文件,将该库添加到 LinkPackageStatics
和 AllPackageLibs
部分。根据您的项目设置(无论您是否使用运行时包,无论您是静态链接还是动态链接),您可以在“项目选项”、“包”下以及在“项目选项”、“包”、“运行时包”下并编辑包在那里列出,而不是直接编辑
.cbproj
。
添加答案,因为上述答案都没有修复我的项目,具有相同的链接器错误。
包括Vcl.Bind.Consts.hpp头,即
#include "Vcl.Bind.Consts.hpp"
解决了问题。
将 RESTClient 组件添加到打包项目时出现相同的错误。包括以下 .bpi 文件为我解决了这个问题:
要找到它们,请查看 $(BCB) 文件夹。就我而言,路径是:C:\Program Files (x86)\Embarcadero\Studio .0