python文件编译为so文件_Mac上把python源文件编译成so文件

把python源文件编译成so文件

前言

实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求。原理相当于将python编译成c,然后再转成.so文件

.so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。

在网上搜了一下,常用的有2种方法:

通过gcc(make)来操作

使用python来操作

准备工作

在目录下创建__init__.py和hello.py

hello.py 内容为:

def hello():

print "hello"

使用python来操作

安装所需库CPython,命令如下:

pip install cython

创建文件setup.py,内容如下:

from distutils.core import setup

from Cython.Build import cythonize

setup(

ext_modules = cythonize("hello.py")

)

执行setup.py文件

python setup.py build_ext --inplace

在当前目录下就生成了和当前目录同名的一个目录,进入目录即可看见so文件,打开so文件可见一些乱码,达到了加密的目的

使用gcc来编译

编译成c文件,完成后目录下多了hello.c

cython hello.py

编译成hello.o, 完成后目录下多了hello.o

gcc -c -fPIC -I/usr/include/python2.7/ hello.c

编译成so文件

gcc -undefined dynamic_lookup -shared hello.o -o hello.so

部分博客写的命令没有加-undefined dynamic_lookup的参数,会报错,提示

Undefined symbols for architecture x86_64

也有说加-lstdc++参数使用c++标准库就可以的,但是我尝试了不成功,依然报同样的错误

gcc -lstdc++ -v -shared hello.o -o hello.so

验证

在so文件目录下,进入python终端,然后尝试使用一下这个模块就可以了,如下:

>>> from hello import hello

>>> hello()

hello

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值