- 论坛徽章:
- 3
|
背景如下:
——————————————
python:2.6.6
django:忘记版本
openssl:下载最新版本1.0.0源代码编译为crypt.a,ssl.a(这2个.a文件没有使用)
项目代码C/C++:编译为xyz.so,其中把openssl编译生成的.o链接进来
OS openssl:版本0.9.8
——————————————
验证如下:
A、Linux系统,nginx、django后台python通过ctypes调用xyz.so的项目代码的API_xyz(),API_xyz调用crypto的某个源文件的function_abc(),出现段错误
B、Linux系统,python直接通过ctypes调用xyz.so的项目代码的API_xyz(),API_xyz调用crypto的某个源文件的function_abc(),出现段错误
C、Linux系统,C调用xyz.so的项目代码API_xyz(),API_xyz()调用crypto的某个源文件的function_abc(),正常
D、windows环境,python直接通过ctypes调用xyz.so的项目代码的API_xyz(),API_xyz调用crypto的某个源文件的function_abc(),正常
E、windows环境,C调用xyz.so的项目代码API_xyz(),API_xyz()调用crypto的某个源文件的function_abc(),正常
结论如下:
——————————————
xyz.so,在windows环境政策
xyz.so,在Linux环境
python->不正常
C/C++->正常
通过修改openssl的1.0.0,增加printf(),
发现
A、linux+python环境,几个函数不执行打印,调到系统的0.9.8的函数去了(可以肯定),其他几个函数调用到1.0.0
B、其他环境,都调用到1.0.0
大家帮忙分析一下(可能有人碰到过类似问题)
openssl 1.0.0是通过.o链接到xyz.so的,为何在linux+python环境部分函数会调用到0.9.8里面去,linux+C的环境却不会?
|
|