Python 是一種非常流行的編程語言,由于它的易用性和高效性,在各種應用場景下都有著廣泛的應用。與 C++ 等其他語言一樣,Python 也支持打包成動態鏈接庫(.so)供其他程序調用,本文介紹如何使用 Python 在 Linux 平臺下打包 .so 庫。
首先,我們需要安裝 Python 的 ctypes 包,這個包提供了調用 C 語言庫的接口。在 Linux 下,Python 一般自帶 ctypes 包,但是如果不確定可以輸入下面的命令檢查一下:
import ctypes print(ctypes.__file__)
這里介紹一個例子來進行演示打包操作,我們的 .so 庫將會包含一個例子函數:
#includeint hello(char* name) { printf("Hello %s from C!\n", name); return 0; }
通過編譯上面的代碼,我們會得到一個名為 libexample.so 的動態鏈接庫,其就是我們需要使用 Python 打包的庫。下面是 Python 的代碼:
import ctypes lib = ctypes.cdll.LoadLibrary("./libexample.so") lib.hello.argtypes = [ctypes.c_char_p] lib.hello.restype = ctypes.c_int lib.hello(b"World")
上面的代碼通過 ctypes 包載入了 libexample.so 庫,設置了參數類型為 char*,返回值類型為 int,并調用了庫中的 hello 函數,并傳遞了一個 "World" 字符串。
在使用 ctypes 進行打包時,我們需要保證庫文件的版本與 Python 的版本一致。如果出現了版本不兼容的情況,可能會出現未知錯誤。此外,在使用 ctypes 調用 C 函數時要注意參數類型和返回值類型的設置,否則也容易出現錯誤。