python擴展之C++篇


首先貼幾個帖子

https://eastlakeside.gitbooks.io/interpy-zh/content/c_extensions/swig.html

http://blog.csdn.net/a8572785/article/details/10427521

http://blog.csdn.net/marscrazy_90/article/details/14045683

混合編程能夠在性能和開發速度上有很好的平衡,今天學習了python調用c++函數的三種方法

python使用C++ 的擴展庫,有三種方法:1.使用ctype 2.使用swgi 3.使用python/c API 

 

前面兩種方法對源文件沒有進行破壞,而最后有一種方法需要使用python.h 里面的python struct,對所有的代碼進行重新編碼,編出來的代碼可以叫做cython,這種方法最通用,代碼效率也最高

第一種方法使用了ctype加載dll文件,但對有些變量類型得重新申明,例如float,double,如果調用自己

第二種方法相當於使用swgi的庫對源文件生成中間件 *.i,再通過c++編譯生成對應的dll文件,將dll文件更名為_*.pyd 然后將_*.pyd 和_.py文件拷貝至python項目目錄,即可導入使用。

第三種方法,重新對源代碼進行編碼

 

下面詳細介紹在  python3.5+vs2015+swig3.0.12+win10 64位系統 環境下的 第一種 和 第二種方法

第一中方法,參考http://blog.csdn.net/marscrazy_90/article/details/14045683

第二種方法,參考 http://blog.csdn.net/a8572785/article/details/10427521,但是記住在編譯dll的時候選release  x64 並且在工程項目-->屬性-->c++-->鏈接器-->輸入項中 填入python35.lib python3.lib等庫文件名

 

同時在添加庫文件的時候 有兩種方法,第一種是在項目屬性的vc++目錄 中添加包含目錄和庫目錄  並在工程項目-->屬性-->c++-->鏈接器-->輸入-->附加依賴項項中 填入庫文件名

第二種方法是在C/C++目錄里面 添加

添加工程的頭文件目錄:工程---屬性---配置屬性---c/c++---常規---附加包含目錄:加上頭文件存放目錄。

B、添加文件引用的lib靜態庫路徑:工程---屬性---配置屬性---鏈接器---常規---附加庫目錄:加上lib文件存放目錄。
C  然后添加工程引用的lib文件名:工程---屬性---配置屬性---鏈接器---輸入---附加依賴項:加上lib文件名。

 

這兩種方法有什么不同,據說第一種方法是添加后 只對該項目有效,第二種方法是添加后整個VS內工程都有效

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM