python 调用c++
?
由于Python的ctypes可以使python輕松調(diào)用動(dòng)態(tài)鏈接庫,從而調(diào)用c/c++程序。利用gcc編譯c++文件為動(dòng)態(tài)鏈接庫dll或者so文件,再利用python來調(diào)用。
?
1、下載gcc
系統(tǒng)為win7 X64,下載windows版本 MinGW,下載地址:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/
下載Download mingw-get-setup.exe (86.5 kB) (注意這是win32 的版本)
進(jìn)行安裝:
選擇默認(rèn)安裝目錄 C:\MinGW;
選擇安裝組件,如果沒有出現(xiàn)這個(gè)窗口,點(diǎn)擊快速啟動(dòng)欄,點(diǎn)擊MinGW Installation Manager,一定選上安裝The GUN C++ Compiler和The GUN Objectiv-C Compiler。
完成之后退出,將C:\MinGW\bin 添加到環(huán)境變量。設(shè)置完成后,Windows似乎不會(huì)自動(dòng)更新環(huán)境變量,除非重啟機(jī)子,那么我們可以通過在下面的命令行中,胡亂設(shè)置一下PATH(比如SET PATH=C:\),然后退出命令行,那么系統(tǒng)環(huán)境變量就會(huì)被強(qiáng)制刷新。
點(diǎn)擊cmd,輸入 g++ v 可以查看編譯器版本。
?
2、編譯c++
新建一c++文件:如test1.cpp
#include<iostream> using namespace std; void foo2(int a,int b) { cout<<a<<" "<<b<<endl; } //編譯C++,一定要加extern "C",注意C為大寫,小寫會(huì)無法識(shí)別 extern "C" { void cfoo2(int a,int b) { foo2(a,b); } }在cmd窗口中cd到該文件所在目錄,輸入:g++ -o test1.so -shared -fPIC test1.cpp
-shared 該選項(xiàng)指定生成動(dòng)態(tài)連接庫(讓連接器生成T類型的導(dǎo)出符號(hào)表,有時(shí)候也生成弱連接W類型的導(dǎo)出符號(hào)),不用該標(biāo)志外部程序無法連接。相當(dāng)于一個(gè)可執(zhí)行文件;
-fPIC:表示編譯為位置獨(dú)立的代碼,不用此選項(xiàng)的話編譯后的代碼是位置相關(guān)的所以動(dòng)態(tài)載入時(shí)是通過代碼拷貝的方式來滿足不同進(jìn)程的需要,而不能達(dá)到真正代碼段共享的目的。
會(huì)生產(chǎn)一個(gè)test1.so 動(dòng)態(tài)鏈接庫文件。
3、python調(diào)用
寫python文件,如test1.py
import ctypes ll = ctypes.cdll.LoadLibrary lib = ll("./test1.so") lib.cfoo2(1, 3)運(yùn)行python文件 python test1.py
注意此處,我的python開始安裝的為64位的,但是g++ 編譯的動(dòng)態(tài)文件是32位的,所以此處調(diào)用會(huì)出錯(cuò):不是有效的Win32
此時(shí)要把原來的64位的python卸載掉,再安裝一個(gè)32位的Python就可以了。
運(yùn)行成功顯示:1 3
?
總結(jié)
以上是生活随笔為你收集整理的python 调用c++的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Github Windows安装帮助
- 下一篇: vector iterator not