Mac上把python原始檔編譯成so檔案

2021-09-07 19:07:32 字數 1036 閱讀 9691

前言

實際上屬於一種**混淆/加密的技術,大家知道python的原始檔放在那裡,大家是都可以看的,不像c語言編譯出來可以拿編譯後的東西去執行,所以就出現了這種需求。原理相當於將python編譯成c,然後再轉成.so檔案

.so檔案為動態鏈結庫,可以在程式執行時動態鏈結,類似於windows的dll檔案。

在網上搜了一下,常用的有2種方法:

準備工作

def hello():

print "hello"

使用python來操作
pip install cython
from distutils.core import setup

from cython.build import cythonize

setup(

ext_modules = cythonize("hello.py")

)

python setup.py build_ext --inplace
使用gcc來編譯
cython hello.py
gcc -c -fpic -i/usr/include/python2.7/ hello.c
gcc -undefined dynamic_lookup -shared hello.o -o hello.so
undefined symbols for architecture x86_64
參考 加上那個引數就好了

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

在so檔案目錄下,進入python終端,然後嘗試使用一下這個模組就可以了,如下:

>>> from hello import hello

>>> hello()

hello

參考

Mac上把python原始檔編譯成so檔案

前言 實際上屬於一種 混淆 加密的技術,大家知道python的原始檔放在那裡,大家是都可以看的,不像c語言編譯出來可以拿編譯後的東西去執行,所以就出現了這種需求。原理相當於將python編譯成c,然後再轉成.so檔案 so檔案為動態鏈結庫,可以在程式執行時動態鏈結,類似於windows的dll檔案。...

Python原始檔改寫

編寫乙個程式,讀取乙個python源程式檔案,將檔案中所有除保留字之外的小寫字母換成字母,並且生成檔案要能夠被python直譯器正確執行。以下給出程式 coding utf 8 import keyword f open test.py content f.read f.close table ra...

多個原始檔進行編譯,即 makefile 的編寫

makefile的好處是防止原始檔的重複編譯 比如有好多個原始檔,某天對其中乙個原始檔進行修改,如果不寫makefile的話,需要將整個工程的所有檔案重新編譯一遍,非常麻煩,有了makefile,說明了每個原始檔的依附關係,當某個原始檔改變的時候只需重新編譯一下關聯的原始檔就好。例如 有以下檔案 o...