python調用C++


python調用C++

python調用C++的方法有很多,筆者也試了很多但是不太好用
今天看到有人用swig來做封裝

安裝swig

$ sudo apt-get install swig
源文件
//test.h
int add(int a,int b);
int sub(int a,int b);

//test.cpp
int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}
test.i
//%module 后面的名字是被封裝的模塊名稱。封裝口,python通過這個名稱加載程序

//%{  %}之間所添加的內容,一般包含此文件需要的一些函數聲明和頭文件。

//最后一部分,聲明了要封裝的函數和變量,直接使用%include 文件模塊頭文件直接包含即可

//file test.i
%module  test

%{
#include "test.h"
%}

%include "test.h"
執行命令編譯.i文件
$ swig -python -c++ test.i

此時會生成對應的文件: 模塊名_warp.cxx、模塊名.py

利用python提供的自動化編譯模塊進行編譯。編寫一個編譯文件setup.py
# setup.py

"""
    setup.py file for SWIG example
"""
from distutils.core import setup, Extension
import numpy

test_module = Extension('_test', # #模塊名稱,必須要有下划線"_"必須有
                           sources=['test_wrap.cxx', 'test.cpp'], #封裝的cxx和源文件cpp
                           )
setup(name = 'test',  #打包后的名稱
      version = '0.1',
      author = "zhangbo",
      description = """Simple swig example from docs""",
      ext_modules = [test_module], #與上面的擴展模塊名稱一致
      py_modules = ["test"], #需要打包的模塊列表
)

利用python的執行setup.py文件

$ python setup.py build #編譯生成對應庫,可供python直接調用的模塊

實現過程如下所示:test模塊為通過編譯c++代碼生成test模塊,前面已經介紹c++代碼示例:

import test
print(test.add(3, 4))

Inference

[1] https://blog.csdn.net/qq_26105397/article/details/83153606


免責聲明!

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



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