【发布时间】:2023-03-08 14:51:01
【问题描述】:
我有一个 .cpp(称为 trial.cpp)文件,如下:
#include "trial.hpp" int main() { cout << "hello"; return 0; }
我的头文件(trial.hpp)是:
#include <iostream> using namespace std;
我有一个 .i 文件 (trial.i),如下所示:
%module trial %{ #include "trial.hpp" %} %include trial.hpp
我在 cmd 中以如下方式使用 SWIG 生成 .pyd、.py、.o 和 .cxx 文件:
swig -c++ -python trial.i
g++ -c trial_wrap.cxx -I C:\Users.....Python\Python37\include
g++ -shared trial_wrap.o -o _trial.pyd -L C:\用户.....\Python\Python37\libs -l python37
文件生成成功
但是,当我打开 Python 命令提示符并运行以下命令时:
从试用导入 *
main()
我收到一个错误提示
Traceback(最近一次通话最后一次):
文件“
”,第 1 行,在 NameError: name 'main' 未定义
我该如何解决这个问题?
此外,如果我使用另一个函数名(比如 fn1())而不是 main(),则会在第三个命令中收到以下错误:
g++ -shared trial_wrap.o -o _trial.pyd -L C:\Users.....\Python\Python37\libs -l python37
错误是:
对 fn1() 的未定义引用
我想用 fn1() 代替 main()
我该如何解决这个问题?
【问题讨论】:
-
我对 swig 一无所知,但
main在 C++ 中很特别。尝试使用另一个函数名并在标题中声明它(并删除那个using namespace std;,它会造成比少数保存的击键更有价值的伤害) -
当我尝试使用另一个函数名(我们称之为 fn1())并在标题中提供定义时,我在尝试运行第三条语句时收到一条错误消息,提示“未定义对 fn1() 的引用在问题中提到的 SWIG 中'
-
你的头文件没有声明你要包装的函数,所以它不会被包装。
-
不,这不是真的。 “%include trial.hpp”告诉 SWIG 包装所有可用函数
标签: python c++ python-3.x swig