• SWIG

    SWIG

    SWIG是Simplified Wrapper and Interface Generator的缩写。是Python中调用C代码的另一种方法。在这个方法中,开发人员必须编写一个额外的接口文件来作为SWIG(终端工具)的入口。

    Python开发者一般不会采用这种方法,因为大多数情况它会带来不必要的复杂。而当你有一个C/C++代码库需要被多种语言调用时,这将是个非常不错的选择。

    示例如下(来自SWIG官网)

    1. ```C
    2. #include <time.h>
    3. double My_variable = 3.0;
    4. int fact(int n) {
    5. if (n <= 1) return 1;
    6. else return n*fact(n-1);
    7. }
    8. int my_mod(int x, int y) {
    9. return (x%y);
    10. }
    11. char *get_time()
    12. {
    13. time_t ltime;
    14. time(&ltime);
    15. return ctime(&ltime);
    16. }

    编译它

    1. unix % swig -python example.i
    2. unix % gcc -c example.c example_wrap.c \
    3. -I/usr/local/include/python2.1
    4. unix % ld -shared example.o example_wrap.o -o _example.so

    最后,Python的输出

    1. >>> import example
    2. >>> example.fact(5)
    3. 120
    4. >>> example.my_mod(7,3)
    5. 1
    6. >>> example.get_time()
    7. 'Sun Feb 11 23:01:07 1996'
    8. >>>

    我们可以看到,使用SWIG确实达到了同样的效果,虽然下了更多的工夫,但如果你的目标是多语言还是很值得的。