回覆列表
-
1 # 魯賓孫印象
-
2 # 小小猿愛嘻嘻
這裡介紹一種簡單的方式—編譯為dll或so動態庫,然後再使用ctypes模組呼叫就行,下面我簡單介紹一下實現過程,主要內容如下:
編譯為dll這種方式主要應用在Windows平臺下,將C語言程式編譯為一個dll動態庫,然後直接使用ctypes模組載入使用就行,測試過程如下:
1.為了更好的說明問題,這裡我利用VS2017編譯了一個dll檔案,源C程式碼如下,非常簡單,一個相乘函式:
2.編譯完成後,我們在同級目錄下新建一個py檔案,直接使用ctpyes模組載入剛才編譯好的dll檔案就行,如下,非常簡單:
編譯為so這種方式主要應用在Linux環境下,基本過程和Windows平臺下差不多,也是先編譯為so動態庫檔案,然後再使用ctypes模組載入使用就行,測試過程如下:
1.測試C程式如下,兩個簡單的函式,一個相加一個相乘,接著使用gcc命令將這個C檔案編譯為so檔案,編譯命令“gcc -shared -Wl,-soname,test -o test.so -fPIC test.c”:
2.編譯完成後,在同級目錄下也新建一個py檔案,也直接使用ctypes模組載入so檔案使用就行,程式碼幾乎不變,如下:
直接執行這個程式,效果如下,已經成功呼叫C函式:
-
3 # new-小組會
我本人沒做過完整的,但是在專案中見到過呼叫。cpp程式寫好後,必然有一個main函式在,或者你就寫一個main.cc,把main函式放在這個檔案裡。編譯好後,把編譯後的程式放在Python程式根目錄的某個資料夾內(其實隨便放哪兒,不過為了方便),然後在Python檔案中就可以直接匯入專案名,也就是c程式的名字,然後就能用了,不過這是直接從main函式入口呼叫,如何呼叫其他的函式,這個我沒用過,不過應該大同小異吧。
如果呼叫 shell
透過exec dos當式,或者 shell 或者中斷都可以的
都可以的。
也可以編譯成 動態庫 或者so.