奇怪的 C++ Builder 链接器错误 DATA.BIND.OBJECTSCOPE.OBJ

问题描述 投票:0回答:5

所以我重新编译了一个完美且工作的项目,突然我得到的只是这个链接器错误:

[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>

我尝试进行完整的光盘清理,删除所有临时文件等...没有变化... 这个项目昨天编译得很好。

linker-errors c++builder c++builder-xe7
5个回答
3
投票

我在 Embarcadero bug tracker 上找到了这个解决方案:

将以下内容添加到您的源文件之一

#if defined(_WIN32) && !defined(_WIN64)

#pragma link "Data.Bind.ObjectScope.obj"

#endif

原始解决方案已在此处提供。 https://plus.google.com/103589122222763968447/posts/gSwPfUZLPEH


3
投票

如果其他人偶然发现这个非常令人沮丧的问题,我会在此处添加此内容。

我遇到了这个问题。当我将

REST.Client.hpp
包含在使用 C++ Builder 的 Embarcadero RAD Studio 项目中时,就发生了这种情况。经过一些浪费时间后,我最终将 REST 客户端组件放到了 GUI 设计器表单上。繁荣。作品。正是这个网站带领我走上了正确的道路。

它表示当您将组件放入表单时,#pragma 链接条目会自动包含在源文件中。


2
投票

根据我的经验,这是当您的项目使用的库或控件决定它需要

DATA.BIND.OBJECTSCOPE
时引起的(例如,由于 Delphi 代码中的
uses
子句或 C++Builder 代码中的
#pragma link
)。

一个快速但一点也不优雅的修复:

  • 确定哪个
    .lib
    文件包含此
    .obj
    文件。 (您可以通过转到 RAD Studio 和您正在使用的任何第三方库的库目录并 grep 查找
    .obj
    文件名来完成此操作,或者 TLIB 命令可以在
    .obj
    中列出
    .lib
    文件.)
  • 在文本编辑器中编辑
    .cbproj
    文件,将该库添加到
    LinkPackageStatics
    AllPackageLibs
    部分。

根据您的项目设置(无论您是否使用运行时包,无论您是静态链接还是动态链接),您可以在“项目选项”、“包”下以及在“项目选项”、“包”、“运行时包”下并编辑包在那里列出,而不是直接编辑

.cbproj


0
投票

添加答案,因为上述答案都没有修复我的项目,具有相同的链接器错误。

包括Vcl.Bind.Consts.hpp头,即

#include "Vcl.Bind.Consts.hpp"

解决了问题。


0
投票

将 RESTClient 组件添加到打包项目时出现相同的错误。包括以下 .bpi 文件为我解决了这个问题:

  • vcl.bpi
  • bindcomp.bpi
  • bindengine.bpi
  • RESTComponents.bpi

要找到它们,请查看 $(BCB) 文件夹。就我而言,路径是:C:\Program Files (x86)\Embarcadero\Studio .0

© www.soinside.com 2019 - 2024. All rights reserved.