[Linker Fatal Error] Fatal: Unable to open file 'GRAPHICS.OBJ'

kezhu 2004-08-16 02:23:55
这个错误信息是怎么回事?

这是一个dll程序,用到了Graphics::TBitmap,为了能在没有CB环境的机器上运行,在Project->Options->Packages中将Build with runtime packages的对勾去掉,结果就Link不过了,有这个对勾时是好的,不知为什么?exe好像没有这个问题。
...全文
484 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnrealboy 2004-08-31
  • 打赏
  • 举报
回复
楼主,你的错误应该试你的系统引起的。
具体原因不好说。
因为你的代码正常的机器可以通过。
没有任何错误——除了最初的那个,看看你的短消息把。
kezhu 2004-08-31
  • 打赏
  • 举报
回复
ding
kezhu 2004-08-27
  • 打赏
  • 举报
回复
依然不行,link错误更多了
Build
[Linker Error] Unresolved external '__fastcall Oleserver::TOleServer::ConnectEvents(const System::DelphiInterface<System::IInterface>)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
[Linker Error] Unresolved external '__fastcall Oleserver::TOleServer::DisconnectEvents(const System::DelphiInterface<System::IInterface>)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
[Linker Error] Unresolved external '__tpdsc__ Oleserver::TOleServer' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
[Linker Error] Unresolved external 'Oleserver::TOleServer::' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
[Linker Error] Unresolved external '__fastcall Oleserver::TOleServer::~TOleServer()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
[Linker Error] Unresolved external '__fastcall Oleserver::TOleServer::Loaded()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
[Linker Error] Unresolved external '__stdcall Oleserver::TOleServer::QueryInterface(const _GUID&, void *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
[Linker Error] Unresolved external '__fastcall Oleserver::TOleServer::TOleServer(Classes::TComponent *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
[Linker Error] Unresolved external '__fastcall Oleserver::TOleServer::GetServer()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\BCB2KAXSERVER.LIB|Outlook_2K_SRVR.cpp
在source\vcl目录下生成了graphis.obj,拷贝到工程目录下,在工程中删除graphics.pas,添加graphics.obj,再link,但还是上面的错误,为什么?
cnrealboy 2004-08-26
  • 打赏
  • 举报
回复
然后你再移去那个pas试一试,应该还是能够编译通过,原因就在于你编译以后获得了一个obj文件,以后你的其他工程也可能不再需要添加了。

正如我在2楼所说的,而楼主却没有尝试。

btw:我是看见楼主没有结贴,看一下是不是问题没有解决,我原来以为楼主问题早就应该解决了。
cnrealboy 2004-08-26
  • 打赏
  • 举报
回复
你选择添加文件-〉更改类型为*.pas->转移到目录source下的vcl选择graphics.pas->打开

就可以了,你试一下,不行再找我。
kezhu 2004-08-25
  • 打赏
  • 举报
回复
to:xcling00()
1,需要手工包含什么lib文件,系统的.h或.hpp中都应该包含了吧,因为在一个exe工程中这样使用是没有问题的。
2,已经这样做过了,结果还是一样。
3,没有自动打开的cpp,我都是在Project Manager中选择cpp打开。拷贝到其他目录也一样,只要还是dll工程。

to:PPower(月亮光光,照地堂)
两个都加上了,还是一样。
勉励前行 2004-08-24
  • 打赏
  • 举报
回复
加上這一句:
#pragma link "jpeg" //或者 vcljpg.lib

kezhu 2004-08-24
  • 打赏
  • 举报
回复
程序其实很简单,就是利用cb下的bmp和jpg转化方便做的一个dll(vc下调用方便),工程创建时用的是默认选项:use vcl,options中只是把Build with runtime packages的对勾去掉,其它未改,就link失败了,程序如下:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include <JPEG.hpp>
#pragma hdrstop
//---------------------------------------------------------------------------
// Important note about DLL memory management when your DLL uses the
// static version of the RunTime Library:
//
// If your DLL exports any functions that pass String objects (or structs/
// classes containing nested Strings) as parameter or function results,
// you will need to add the library MEMMGR.LIB to both the DLL project and
// any other projects that use the DLL. You will also need to use MEMMGR.LIB
// if any other projects which use the DLL will be performing new or delete
// operations on any non-TObject-derived classes which are exported from the
// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases,
// the file BORLNDMM.DLL should be deployed along with your DLL.
//
// To avoid using BORLNDMM.DLL, pass string information using "char *" or
// ShortString parameters.
//
// If your DLL uses the dynamic version of the RTL, you do not need to
// explicitly add MEMMGR.LIB as this will be done implicitly for you
//---------------------------------------------------------------------------

extern "C" __declspec(dllexport) long _stdcall ConvertPic(IN long Mode, IN char *srcData, IN long srcLen, OUT char *tagData, OUT long *tagLen);
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
//---------------------------------------------------------------------------
long _stdcall ConvertPic
(
IN long Mode, //0:JPG->BMP,非0:BMP->JPG
IN char *srcData, //源图片数据
IN long srcLen, //数据长度
OUT char *tagData, //目标图片数据
OUT long *tagLen //数据长度
)
{
long lRet=0;
Graphics::TBitmap *bmp=new Graphics::TBitmap();
TJPEGImage *jpg=new TJPEGImage();

TMemoryStream *ms=new TMemoryStream();
ms->Write(srcData,srcLen);
ms->Position=0;

TMemoryStream *ms1=new TMemoryStream();
try
{
if(Mode==0)
{
jpg->LoadFromStream(ms);
bmp->Assign(jpg);
bmp->SaveToStream(ms1);
}
else
{
bmp->LoadFromStream(ms);
jpg->Assign(bmp);
jpg->SaveToStream(ms1);
}
*tagLen=ms1->Size;
ms1->Read(tagData,*tagLen);
}
catch(Exception &e)
{
//e.Free();
lRet=-1;
}
delete ms1;
delete ms;
delete bmp;
delete jpg;

return lRet;
}
到底是怎么回事呀??
xcling00 2004-08-24
  • 打赏
  • 举报
回复
1.确定把所需的lib文件都包含进来了?
2.把工程目录下的obj文件删掉再编译一下。
3.如果还不行,把工程打开时,将窗口自动打开的cpp文件一个一个地关掉,再用ctrl+F12打开cpp文件,编译。或者考到其它目录下试试。
kezhu 2004-08-23
  • 打赏
  • 举报
回复
ding
kezhu 2004-08-17
  • 打赏
  • 举报
回复
options中的很多属性,知道怎么回事的试了一些,但效果都一样。
cnrealboy 2004-08-17
  • 打赏
  • 举报
回复
我也不知道你的系统处在那里,因为有时候就是一些很小很细的地方,所以只能够一步步的尝试,不知道楼主尝试了没有?
kezhu 2004-08-17
  • 打赏
  • 举报
回复
按说系统不应该这样的,是不是工程创建时有问题,导致某些参数设置不对,我的是用dll wizard创建的,这样需要注意哪些?
cnrealboy 2004-08-16
  • 打赏
  • 举报
回复
是让你把GRAPHICS.pas编译,然后它编译出来的obj放入能够被系统找到的路径

或者把它加入工程中,这样系统就应该知道那里可以找到源文件了
kezhu 2004-08-16
  • 打赏
  • 举报
回复
两个bpr当然能比较出不同,但我还是不知道为什么?

手动将一个obj加入工程,难道需要这样吗?cb不能自动做吗?以后遇到其他类似的情况都要手动吗?
cnrealboy 2004-08-16
  • 打赏
  • 举报
回复
搂主,GRAPHICS是bcb的一个类,它确实没有obj,你可以在cb的安装目录下找到它,你手动编译一下或者手工把它加入工程。
qiuafa 2004-08-16
  • 打赏
  • 举报
回复
比较有这个对勾时和没有这个对勾时保存的.bpr,你就可以找到答案。

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧