首先貼幾個帖子
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內工程都有效