将SWIG用于.cpp,这取决于另一个.cpp

问题描述 投票:0回答:1

我有一个.cpp文件,它调用了另一个.cpp文件。我想使用SWIG为此创建一个Python包装器。如何使用SWIG做到这一点。当我只有一个.cpp文件时,我可以通过以下方式创建.so:

//app.cpp
#include "app.hpp"
int p(int a)
{
std::cout<<"hello...SWIG runs fine!"<<std::endl;
return a;
}


//app.hpp
#include <iostream>
int p(int a);


//app.i
%module app
%{
#include "app.hpp"
%}
%include "app.hpp"

运行的命令是:

  • swig -c ++ -python app.i

  • g ++ -Isrc -fPIC -I /../../../../ usr / include / python3.6m-I /../../../../ usr / include / x86_64-linux-gnu / python3.6m -lpython3.6m -c app.cpp app_wrap.cxx

  • g ++ -shared -fPIC -o _app.so app.o app_wrap.o

我已成功使用此方法生成了.so文件。但是,现在我的app.cpp需要使用另一个.cpp文件中定义的函数((在hello.cpp中称为int fn1(int x)的函数])。我现在如何生成.so?如果有人能提供一个小例子,那就太好了!

EDIT::有人建议我必须同时使用SWIG和CMAKE。这是真的?如果是,我该怎么办?

cmake swig
1个回答
0
投票

解决了!

swig -c ++ -python file1.i

g ++ -Isrc -fPIC -I /../../../../ usr / include / python3.6m-I /../../../../ usr / include / x86_64-linux-gnu / python3.6m -lpython3.6m -c file1.cpp file2.cpp file1_wrap.cxx

g ++ -shared -fPIC -o _file1.pyd file1.o file2.o file1_wrap.o

事实证明,我们可以使用CMake定义依赖关系并自动执行此过程。同样,SWIG可以与SWake一起使用,如SWIG文档Introduction_build_system

所述
© www.soinside.com 2019 - 2024. All rights reserved.