解决Python "no OPENSSL_Applink"错误

来源:互联网 发布:vb datagrid 列不显示 编辑:程序博客网 时间:2024/05/17 02:43

Windows平台在使用了Python的M2Crypto函数库时,当在使用 X509.load_cert()等涉及到bio模块相关读写操作的时候就会出现这个错误,上网查了下,大概知道了出错原因,因为BIO模块在读写时会调用libeay32.lib库里的bio_new_fp函数,而调用此函数会涉及到本次的主角OPENSSL_Uplink函数(在openssl库uplink.c文件中定义)此函数会通过这样的方式获取一个句柄:

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位下载地址:点击打开链接

1 0
原创粉丝点击