即使我可以导入它,为什么我的模块无法工作?

时间:2017-01-06 11:53:23

标签: python c linux module swig

我正在关注以下教程:https://en.wikibooks.org/wiki/Python_Programming/Extending_with_C我指的是标题为"使用Swig"的部分。我在他的位置创建文件:

~/Desktop/TEST2/helloMODULEtest

我首先使用此代码init:

创建一个名为hellomodule.c的文件
/*hellomodule.c*/

    #include <stdio.h>

    void say_hello(const char* name) {
            printf("Hello %s!\n", name);
    }

然后我在同一位置创建文件hello.i:

/*hello.i*/

%module hello
extern void say_hello(const char* name);

我在Pi上安装了swig和python-dev。所以在终端输入这三行:

$ swig -python hello.i
$ gcc -fpic -c hellomodule.c hello_wrap.c -I/usr/include/python2.7/
$ gcc -shared hellomodule.o hello_wrap.o -o _hello.so -lpython2.7

给我这些文件:

  • hellomodule.o
  • hello.py
  • _hello.so
  • hello_wrap.c
  • hello_wrap.o

然后sudo将hello.py和_hello.so复制到我的python2.7 lib文件中:

$ sudo cp ~/Desktop/TEST2/helloMODULEtest/hello.py /usr/lib/python2.7
$ sudo cp ~/Desktop/TEST2/helloMODULEtest/_hello.so /usr/lib/python2.7

完成这些步骤后,我可以使用Python 2.7.9 shell。在shell中输入

 >>> import hello

并且不会收到警告或错误,表示已导入hello.py。但是,当我输入

>>> hello.say_hello("World")

模块似乎什么也没有返回,然后转到下一行。这是&#34;对话框&#34;对于导入并使用下一个输入行调用hello:

>>> import hello
>>> hello.say_hello("World")
>>>

我想看到这个:

>>> import hello
>>> hello.say_hello("World")
Hello World!
>>>

所以,我的问题是为什么我的hello.py模块没有返回任何内容?

1 个答案:

答案 0 :(得分:0)

将您的hello.i文件更新为:

/*hello.i*/

%module hello
%{
void say_hello(const char* name);
%}

void say_hello(const char* name);