请问一个关于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啦!