



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在Windows下用MinGW编译OpenSSL,及OpenSSL静态链接库libcrypto.a使用问题 收藏 最经我用MinGW编译OpenSSL的过程中发生了很多问题,不过好在已经解决了,现在写出来以备查询以OpenSSL-0.9.8l为例:前略(下载,解压)注意要安装Perl,如果你只是用来安装OpenSSL的可以下ActivePerl,以后还有其它用的下strawberry-perl(先说问题)使用MinGW编译OpenSSL时我发现有以下问题1、解压目录msmingw32.bat内的路径有问题,直接使用会报找不到文件2、编译过程中报错(内容如下).cryptodesset_key.c:68: error: static declaration of _hide_DES_check_key follows non-static declaration .cryptodesset_key.c:68: error: previous declaration of _hide_DES_check_key was heremingw32-make: * tmpset_key.o Error 1 3、其它编译问题(我没有遇到,不过似乎官方有准备)4、使用静态链接库libcrypto.a时libcrypto.a(rand_win.o)(.text+0xb13):rand_win.c: undefined reference to _CreateDCA16libcrypto.a(rand_win.o)(.text+0xb24):rand_win.c: undefined reference to _CreateCompatibleDC4等错误解决法案: 一、解决这一种问题方法 是将mingw32.bat从 解压目录ms 下面复制回 解压目录 下面,即将mingw32.bat放在解压后的OpenSSL的根目录下二、编译过程中出现上述的报错,问题出在 解压目录e_os2.h 中:264行# define OPENSSL_IMPLEMENT_GLOBAL(type,name) extern type _hide_#name; type *_shadow_#name(void) return &_hide_#name; static type _hide_#name其中的static 修饰,解决方法有两个:1、将static 修饰删了,不过这样可能会改变原来作者的意图2、这个方法有点麻烦需要修改 解压目录e_os2.h 解压目录cryptodesenc_read.c 解压目录cryptodesset_key.c这三个文件=解压目录e_os2.h:定位第255行(参照句出现的行号,并非需要修改的直接行号)做如下操作,每行前的 - 号代表删除行,+ 号代表添加行: The way its done allows definitions like this: / in foobar.c- OPENSSL_IMPLEMENT_GLOBAL(int,foobar) = 0;+ OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) / in foobar.h OPENSSL_DECLARE_GLOBAL(int,foobar); #define foobar OPENSSL_GLOBAL_REF(foobar) */ #ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION- # define OPENSSL_IMPLEMENT_GLOBAL(type,name) - extern type _hide_#name; - type *_shadow_#name(void) return &_hide_#name; - static type _hide_#name+ # define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) + type *_shadow_#name(void) + static type _hide_#name=value; return &_hide_#name; # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_#name(void) # define OPENSSL_GLOBAL_REF(name) (*(_shadow_#name() #else- # define OPENSSL_IMPLEMENT_GLOBAL(type,name) OPENSSL_GLOBAL type _shadow_#name+ # define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_#name=value # define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_#name # define OPENSSL_GLOBAL_REF(name) _shadow_#name #endif=解压目录cryptodesenc_read.c定位第64行(参照句出现的行号,并非需要修改的直接行号)做如下操作,每行前的 - 号代表删除行,+ 号代表添加行: /* This has some uglies in it but it works - even over sockets. */ /*extern int errno;*/- OPENSSL_IMPLEMENT_GLOBAL(int,DES_rw_mode)=DES_PCBC_MODE;+ OPENSSL_IMPLEMENT_GLOBAL(int,DES_rw_mode,DES_PCBC_MODE);=解压目录cryptodesset_key.c定位第66行(参照句出现的行号,并非需要修改的直接行号)做如下操作,每行前的 - 号代表删除行,+ 号代表添加行: #include des_locl.h #ifdef OPENSSL_FIPS #include #endif- OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key); /* defaults to false */+ OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key,0); /* defaults to false */=三、至于其它编译问题(不是上面的问题,至于是什么问题,我不知道,因为我没有出现过)官方给出的解决办法是,在执行mingw32.bat时添加no-asm参数,即在控制台先执行(转到根目录,或者将根目录添加到 环境变量 中去)mingw32 no-asm四、这是因为libcrypto.a需要静态链接Gdi32.lib(libgdi32.a),直接添加Gdi32.lib或libgdi32.a就可以了(一定要添加在libcrypto.a后面,即-I libcrypto.a -I libgdi32.a),使用dllwrap的也可以直接添加-lgdi32参数,使用Code:Blocks的在链接器设置(Linker Setting)-链接库(link libraries)的li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 茶叶代销合作协议书
- 钢管扣件保管协议书
- 运维改造合同协议书
- 阅文合同霸王协议书
- 驻场开发保密协议书
- 酒店入股经营协议书
- 修脚店合伙开店协议书
- 养鸡合伙人合同协议书
- 菜园开荒租赁协议书
- 车辆交付违约协议书
- 六、回顾整理-总复习2.图形的认识与测量(二)-平面图形的周长和面积(课件)青岛版六年级下册数学
- 中医养生(灵源万应茶)
- 追索子女抚养费起诉状
- 六年级数学质量分析PPT
- 土地平整、池塘推土、杂草灌木丛及树木清除施工方案
- 眼镜镜架的整形专业培训2课件
- 下线仪式串词策划
- 通用长期供销合同范本
- 《社区治理研究国内外文献综述(1900字)》
- 2023浙江省学生艺术特长测试A级理论复习资料
- 建筑业企业资质职称人员相近专业认定目录
评论
0/150
提交评论