解决Python "no OPENSSL_Applink"错误
2015-08-23 13:09
2779 查看
Windows平台在使用了Python的M2Crypto函数库时,当在使用 X509.load_cert()等涉及到bio模块相关读写操作的时候就会出现这个错误,上网查了下,大概知道了出错原因,因为BIO模块在读写时会调用libeay32.lib库里的bio_new_fp函数,而调用此函数会涉及到本次的主角OPENSSL_Uplink函数(在openssl库uplink.c文件中定义)此函数会通过这样的方式获取一个句柄:
a handle to the file used to create the calling process (.exe file).
GetModuleHandle函数传递一个空值,获取程序即exe进程的句柄,而不是dll自身的句柄,再调用GetProcAddress函数获取程序导出的OPENSSL_Applink函数:
由此可见要想成功调用OPENSSL_Applink函数那么就必须在Python主程序中先定义并导出此函数,因为代码开源可以直接下载python的源码,将openssl工程中applink.c文件复制到python工程的头文件目录里,然后定位到python工程的python.c文件,引入刚才添加的文件,applink.c文件里已经将函数导出了,接下来直接编译就行了
然后只要单独编译Python工程(即python.exe),生成成功后python.exe的文件用Dependency查看,发现多了一个Openssl_AppLink导出函数,表明函数导出成功。
最后将生成的python.exe替换即可,问题解决。
64位下载地址:点击打开链接
h = GetModuleHandle(NULL);MSDN里是这样说的:If this parameter is NULL, GetModuleHandle returns
a handle to the file used to create the calling process (.exe file).
GetModuleHandle函数传递一个空值,获取程序即exe进程的句柄,而不是dll自身的句柄,再调用GetProcAddress函数获取程序导出的OPENSSL_Applink函数:
applink = (void **(*)())GetProcAddress(h, "OPENSSL_Applink");
由此可见要想成功调用OPENSSL_Applink函数那么就必须在Python主程序中先定义并导出此函数,因为代码开源可以直接下载python的源码,将openssl工程中applink.c文件复制到python工程的头文件目录里,然后定位到python工程的python.c文件,引入刚才添加的文件,applink.c文件里已经将函数导出了,接下来直接编译就行了
然后只要单独编译Python工程(即python.exe),生成成功后python.exe的文件用Dependency查看,发现多了一个Openssl_AppLink导出函数,表明函数导出成功。
最后将生成的python.exe替换即可,问题解决。
64位下载地址:点击打开链接
相关文章推荐
- iOS高级-QuartzCore框架-背景平铺
- Android 5.0判断SIM卡(SIM1还是SIM2)
- 五款app原型设计工具对比
- android sdk中自带的json
- Nagios
- iOS中简单的画线功能
- Objective-C中,ARC下的 strong和weak指针原理解释,objective-cweak
- android学习历程
- appium使用小记
- Cocos2d-x中,Speed类的使用
- 09、win32 转换为 store app
- Android 测试 Appium、Robotium、monkey而其他的框架或工具控制
- ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存
- Android 中像素px和dp的转化
- Android 开源组件PagerBottomTabStrip 快速构建底部导航栏
- VS2012验证控件出现WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping的问题
- Android版俄罗斯方块的实现
- iOS那些锁
- Swift学习笔记之数组
- android项目如何引入工具包