0

在使用 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);
    }
}

文件.h

int fib1(int n);

fib.sip

%Module fib

%Include fib.h

我运行以下命令来构建中间文件: sip -c . fib.sip

到目前为止一切正常。

现在我想使用 distutils 构建 .pyd 文件。

安装程序.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 吗?

任何帮助表示赞赏!

亲切的问候

大卫

4

1 回答 1

0

我找到了一个足够好的解决方案:命名空间。下次我会更好地阅读文档。我还应该提到一个带有斐波那契类的解决方案可以解决这个问题,但我觉得这并不令人满意。

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

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);
        }
    }
}

文件.h

namespace test
{
    int fib1(int n);
}

fib.sip

%Module fib

namespace test {
    %TypeHeaderCode
    #include "fib.h"
    %End

    int fib1(int n);
};

setup.py - 没有任何改变

使用了与前面提到的完全相同的命令。

于 2012-05-26T10:35:27.613 回答