Python:sip編譯及使用

1.編譯sip源碼

  • 解壓sip源碼,運行python configure.py -p win32-g++(win32-g++表示使用mingw32編譯器)枪芒。
  • 修改生成的sipconfig.py文件铲球。當(dāng)Python安裝在C:\Program Files (x86)目錄時挺庞,把_pkg_config中Program Files (x86)替換為Progra~2,修改后如下所示:
_pkg_config = {
    'arch':               '',
    'default_bin_dir':    'C:\\Progra~2\\Python',
    'default_mod_dir':    'C:\\Progra~2\\Python\\Lib\\site-packages',
    'default_sip_dir':    'C:\\Progra~2\\Python\\sip',
    'deployment_target':  '',
    'platform':           'win32-g++',
    'py_conf_inc_dir':    'C:\\Progra~2\\Python\\include',
    'py_inc_dir':         'C:\\Progra~2\\Python\\include',
    'py_lib_dir':         'C:\\Progra~2\\Python\\libs',
    'py_version':         0x030603,
    'qt_framework':       0,
    'sip_bin':            'C:\\Progra~2\\Python\\sip',
    'sip_config_args':    '-p win32-g++',
    'sip_inc_dir':        'C:\\Progra~2\\Python\\include',
    'sip_mod_dir':        'C:\\Progra~2\\Python\\Lib\\site-packages',
    'sip_version':        0x041306,
    'sip_version_str':    '4.19.6',
    'universal':          ''
}

當(dāng)Python安裝在C:\Program Files目錄下時稼病,把_pkg_config中Program Files替換為Progra~1即可选侨。

  • 編譯,運行make然走,成功之后運行make install安裝sip援制。其中make install需要管理員權(quán)限。

2. 測試

  • 編寫C文件test.c丰刊,如下所示:
#include <stdio.h>

int add(int x, int y)
{
    return x + y;
}

void hello(char* s)
{
    printf("%s\n", s);
}

char* toString(int x, float y)
{
    static char s[20];
    sprintf(s, "x = %d; y = %f", x, y);
    return s;
}
  • 編寫sip文件test.sip隘谣。sip文件名必須和.c文件名相同。由于使用的是c語言啄巧,必須加上%Module(name=test, language="C")寻歧。內(nèi)容如下所示:
/* Define the SIP wrapper to the add library. */  
%Module(name=test, language="C")
int add(int x, int y);
void hello(char* s);
char* toString(int x, float y);
  • 編寫configure.py,內(nèi)容如下:
import os

import sipconfig

basename = "test"

# The name of the SIP build file generated by SIP and used by the build
# system.
build_file = basename + ".sbf"

# Get the SIP configuration information.
config = sipconfig.Configuration()
os.system("make clean")
# Run SIP to generate the code.
os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, basename + ".sip"]))
os.system(" ".join(['gcc', '-c', basename + ".c"]))
os.system(" ".join(['ar', '-r', "lib" + basename + ".a", basename + ".o"]))
# Create the Makefile.
makefile = sipconfig.SIPModuleMakefile(config, build_file)

# Add the library we are wrapping.  The name doesn't include any platform
# specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the
# ".dll" extension on Windows).
makefile.extra_libs = [basename]
# Search libraries in current directory
makefile.extra_lflags = ['-L.']

# Generate the Makefile itself.
makefile.generate()
os.system("make")

運行python configure.py秩仆,生成的文件如下所示:

結(jié)果.png

其中test.pyd即是編譯后的文件码泛。

  • 測試
import test

a = test.add(12, 3)
print(a)
test.hello('你好啊'.encode())
s = test.toString(12, 45.6)
print(s)

輸出:
15
b'x = 12; y = -2.000000'
你好啊

版權(quán)聲明:本文為「txfly」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議澄耍,轉(zhuǎn)載請附上原文出處鏈接及本聲明噪珊。
原文鏈接:http://www.reibang.com/p/34088714381e

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市齐莲,隨后出現(xiàn)的幾起案子痢站,更是在濱河造成了極大的恐慌,老刑警劉巖选酗,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阵难,死亡現(xiàn)場離奇詭異,居然都是意外死亡芒填,警方通過查閱死者的電腦和手機呜叫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來殿衰,“玉大人朱庆,你說我怎么就攤上這事∶葡椋” “怎么了娱颊?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我维蒙,道長掰吕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任颅痊,我火速辦了婚禮殖熟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斑响。我一直安慰自己菱属,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布舰罚。 她就那樣靜靜地躺著纽门,像睡著了一般。 火紅的嫁衣襯著肌膚如雪营罢。 梳的紋絲不亂的頭發(fā)上赏陵,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音饲漾,去河邊找鬼蝙搔。 笑死,一個胖子當(dāng)著我的面吹牛考传,可吹牛的內(nèi)容都是我干的吃型。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼僚楞,長吁一口氣:“原來是場噩夢啊……” “哼勤晚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泉褐,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤赐写,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后膜赃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體血淌,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年财剖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癌淮。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡躺坟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乳蓄,到底是詐尸還是另有隱情咪橙,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站美侦,受9級特大地震影響产舞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菠剩,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一易猫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧具壮,春花似錦准颓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怜跑,卻和暖如春样勃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背性芬。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工峡眶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人批旺。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓幌陕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汽煮。 傳聞我的和親對象是個殘疾皇子搏熄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容