首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

请教一个关于dll静态编译的有关问题。多谢了

2012-02-08 
请问一个关于dll静态编译的问题。谢谢了。我想建立一个不需要bcb运行库支持的dll,就是说用的时候不用rtl60.b

请问一个关于dll静态编译的问题。谢谢了。
我想建立一个不需要bcb运行库支持的dll,就是说用的时候不用rtl60.bpl   adortl60.bpl   borlndmm.dll等dll和bpl文件就可以运行的dll。

建立dll的时候我选用了vcl类型的而且在dll中
#include   <vcl.h>
#include   <ADODB.hpp>
#inlcude   <windows.h>
等头文件
而且我也用到了
    TADOConnection   *conn=new   TADOConnection(NULL);
    TADOQuery   *qu=new   TADOQuery(NULL);
等数据库组件

在编译的时候将   packages-builder   with   runtime   packages去掉了,
                              compiler中也选择了release
                              linker的-use   dynamic   rtl也去掉了
                              create   debug   information   也去掉了

但是在builder的时候提示
[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TADOQuery::~TADOQuery() '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TCustomADODataSet::~TCustomADODataSet() '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Db::TDataSet::~TDataSet() '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TADOConnection::~TADOConnection() '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Db::TCustomConnection::~TCustomConnection() '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   'Adodb::TADOConnection:: '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TADOConnection::TADOConnection(Classes::TComponent   *) '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TADOConnection::SetConnectionString(const   System::WideString) '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TADOConnection::SetCommandTimeout(const   int) '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TADOConnection::SetCursorLocation(const   Adodb::TCursorLocation) '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Db::TCustomConnection::Open() '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   'Adodb::TADOQuery:: '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TADOQuery::TADOQuery(Classes::TComponent   *) '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ


[Linker   Error]   Unresolved   external   '__fastcall   Adodb::TADOQuery::GetSQL() '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Db::TDataSet::Open() '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ
[Linker   Error]   Unresolved   external   '__fastcall   Db::TDataSet::FieldByName(const   System::AnsiString) '   referenced   from   D:\WORK\CODEPROJECT\QBXEXPORT\EXPORTWEIGHTINFO\OPER.OBJ

错误,好像是ado编译的时候出错的,将packages-builder   with   runtime   packages打勾就好了,但是这样后在别的机器上我要用我写的dll就必须将rtl60.bpl,adortl60.bpl等bpl文件拷贝到system32下才可以。这样总不太好。

请问我如何才能真正建立一个不需要运行库的dll   就是绿色dll?

[解决办法]
我也遇到了同样的问题,真在寻求解决方法呢!有哪位兄弟出来帮帮忙呀!谢谢啦!
[解决办法]
先把packages-builder with runtime packages的勾打上,在下面的框框里加上dbrtl;vcldb;adortl;bdertl;vcldbx等数据库相关的package.
编译一遍.

再去掉packages-builder with runtime packages勾, 再编译一次.
[解决办法]
将原来的obj文件删除
builder all project
[解决办法]
顶到手发软
[解决办法]
看了半天,终于找到解决这个问题的方法啦,给兄弟分享一下,是否能解决你的问题我不敢断言,反正我的问题是解决啦!
具体是这样的:
1、用ultraedit打开存在问题的工程文件(*.bpr),其实是个XML文件格式的;
2、找到LIBRARIES项将其设为: <LIBRARIES value= "vcljpg.lib vcl.lib rtl.lib "/>
SPARELIBS项设为: <SPARELIBS value= "rtl.lib vcl.lib vcljpg.lib "/>
PACKAGES项设为: <PACKAGES value= "rtl.bpi vcl.bpi vclx.bpi vcljpg.bpi bcbsmp.bpi qrpt.bpi dbrtl.bpi
vcldb.bpi bdertl.bpi ibsmp.bpi vcldbx.bpi teeui.bpi teedb.bpi tee.bpi
nmfast.bpi dclocx.bpi "/>
注:其中可以添加你需要的一下包文件
3、保存后,用BCB打开再按照通用的设置方法去设置就OK啦!



热点排行