使用SIP成功编译Python / C绑定后,我想用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吗?
任何帮助表示赞赏!
亲切的问候
大卫
答案 0 :(得分:0)
我找到了一个足够好的解决方案:命名空间。下次我会更好地阅读文档。我还应该提一下,使用Fibonacci类的解决方案可以解决问题,但我没有发现这是令人满意的。
可以找到文件内容。
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 - 没有改变
使用了与之前提到的完全相同的命令。