SIP Python/C++绑定无法编译为简单示例
成功编译与SIP的Python/C绑定后,我想用Python/C++做同样的事情。出于某种原因,这是行不通的。SIP Python/C++绑定无法编译为简单示例
这里的文件:
fib.cpp
#include "fib.h"
int fib1(int n)
{
if (n <= 0) {
return 0;
} else if (n <= 2) {
return 1;
} else {
return fib1(n-1) + fib1(n-2);
}
}
fib.h
int fib1(int n);
fib.sip
%Module fib
%Include fib.h
我运行下面的命令来构建中级文件: sip -c . fib.sip
到目前为止一切正常。
现在我想使用distutils构建.pyd文件。
setup.py
from distutils.core import setup, Extension
import sipdistutils
setup(
name = 'fib',
versione = '1.0',
ext_modules=[
Extension("fib", ["fib.sip", "fib.cpp"]),
],
cmdclass = {'build_ext': sipdistutils.build_ext}
)
我运行下面的命令: python setup.py build
这失败,出现以下错误:
build\temp.win32-2.7\Release\sipfibcmodule.cpp:29:29: error: 'fib1' was not declared in this scope
error: command 'gcc' failed with exit status 1
还有什么问题呢?顺便说一句,C++不应该用作编译器而不是gcc?
任何帮助表示赞赏!
亲切的问候
大卫
我已经找到了一个解决方案,它是不够好:名称空间。下次我会更好地阅读文档。我还应该提到一个斐波那契类解决方案可以解决这个问题,但我没有发现这是令人满意的。
下面的文件内容可以找到。
fib.cpp
#include "fib.h"
namespace test
{
int fib1(int n)
{
if (n <= 0) {
return 0;
} else if (n <= 2) {
return 1;
} else {
return fib1(n-1) + fib1(n-2);
}
}
}
fib.h
namespace test
{
int fib1(int n);
}
fib.sip
%Module fib
namespace test {
%TypeHeaderCode
#include "fib.h"
%End
int fib1(int n);
};
setup.py - 一切如故
完全一样的命令前面提到过使用d。
你所做的是使用另一种方法。要公开方法[link](http:// stackoverflow。com/questions/5614979/python-sip-expose-function) – user3812837
我工作了很长一段时间,但如果你的链接解决方案有效,那么它很棒。谢谢! – mrdr
C++是一种不是编译器的语言。 gcc编译C,C++等语言......请参阅http://gcc.gnu.org/ –
感谢您的回复,我知道C++是一种语言,但它也是一个可编译C++代码的MinGW附带的可执行文件。 – mrdr