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?

任何帮助表示赞赏!

亲切的问候

大卫

+0

C++是一种不是编译器的语言。 gcc编译C,C++等语言......请参阅http://gcc.gnu.org/ –

+0

感谢您的回复,我知道C++是一种语言,但它也是一个可编译C++代码的MinGW附带的可执行文件。 – mrdr

我已经找到了一个解决方案,它是不够好:名称空间。下次我会更好地阅读文档。我还应该提到一个斐波那契类解决方案可以解决这个问题,但我没有发现这是令人满意的。

下面的文件内容可以找到。

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。

+0

你所做的是使用另一种方法。要公开方法[link](http:// stackoverflow。com/questions/5614979/python-sip-expose-function) – user3812837

+0

我工作了很长一段时间,但如果你的链接解决方案有效,那么它很棒。谢谢! – mrdr