Cygwin下调用VC的DLL库.doc_第1页
Cygwin下调用VC的DLL库.doc_第2页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Cygwin的gcc编译器使用windows的dll文件一般的步骤是使用pexports或dumpbin程序导出dll的DEF文件其中dumpbin导出的DEF文件需要手动修改,所以推荐使用pexports,做法如下: pexports libFedTimed.dll libFedTimed.def dlltool -D libFedTimed.dll -d libFedTimed.def -l libFedTimed.a -k 如果该dll是C的函数库,如libmysql.dll或者kernel32.dll类的DLL,这样做就一点问题没有,直接使用。但是如果是VC6、VC7生成的C库则存在C/C+ 轧名规则(name mangling)问题,参见如下表 Compiler void h(int) void h (int, char) void h(void) GNU GCC 3.x _Z1hi _Z1hic _Z1hv GNU GCC 2.9x h_Fi h_Fic h_Fv Intel C+ 8.0 for Linux _Z1hi _Z1hic _Z1hv Microsoft VC+ v6/v7 ?hYAXHZ ?hYAXHDZ ?hYAXXZ Borland C+ v3.1 h$qi h$qizc h$qv OpenVMS C+ V6.5 (ARM mode) H_XI H_XIC H_XV OpenVMS C+ V6.5 (ANSI mode) CXX$_7H_FI0ARG51T CXX$_7H_FIC26CDH77 CXX$_7H_FV2CB06E8 OpenVMS C+ X7.1 IA-64 CXX$_Z1HI2DSQ26A CXX$_Z1HIC2NP3LI4 CXX$_Z1HV0BCA19V Digital Mars C+ ?hYAXHZ ?hYAXHDZ ?hYAXXZ SunPro CC _1cBh6Fi_v_ _1cBh6Fic_v_ _1cBh6F_v_ HP aC+ A.05.55 IA-64 _Z1hi _Z1hic _Z1hv HP aC+ A.03.45 PA-RISC h_Fi h_Fic h_Fv Tru64 C+ V6.5 (ARM mode) h_Xi h_Xic h_Xv Tru64 C+ V6.5 (ANSI mode) _7h_Fi _7h_Fic _7h_Fv 不同编译器生成的导出名称不同,所以在使用Cygwin的gcc编译器链接libFedTimed.a时会出现undefined reference to RTI:FedTimeFactory:makeZero() tstDMSORti HelloWorld.cpp line 442 1225384733078 5683错误因为gcc编译对RTIfedTime:getTime()翻译为:_ZN3RTI14FedTimeFactory8makeZeroEv而DMSORTI的libFedTimed.dll提供的是:?makeZeroFedTimeFactoryRTI 通过自己的摸索,可以修改libFedTimed.def文件中的导出函数声明为:_ZN3RTI14FedTimeFactory8makeZeroEv=?makeZeroFedTimeFactoryRTI再使用dlltool -D libFedTimed.dll -d libFedTimed.def -l libFedTimed.a -k生成的.a文件就可以使用了。 这里还有一个小技巧:先将你的源程序编译出来的.o文件使用nm -s Country.o fungcc3.txt 得到针对函数的gcc命名_ZN3RTI14FedTimeFactory8makeZeroEv,但是它不容易分辨出来,再使用c+filt提出可阅读的的函数调用名称cat fungcc3.txt | c+filt fungcc3read.txt针对VC生成的.def文件,同样可以使用undname恢复函数名称undname libFedTimed.d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论