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