3

我一直在学习通过 swig 扩展 python。在 swig 导师中,它写道:

Building a Python module

Turning C code into a Python module is also easy. Simply do the following (shown for    Irix, see the SWIG Wiki Shared Libraries page for help with other operating systems):

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

We can now use the Python module as follows :
 >>> import example
 >>> example.fact(5)
 120
 >>> example.my_mod(7,3)
 1
 >>> example.get_time()
 'Sun Feb 11 23:01:07 1996'
 >>>

这意味着可以将共享库作为python模块导入。但是我知道共享库文件是由许多机器代码和一些额外信息组成的目标文件,而常规python模块是ascii文件或字节码文件, python虚拟机如何执行机器代码,我很困惑。

4

1 回答 1

4

最后,所有程序都执行机器代码。当 Python 加载一个共享库时,它会调用一个函数 ;这个函数回调到 Python 中,告诉它它有什么类型、函数和模块,以及函数的机器地址和类型描述符是什么。Python 将它们添加到它的表中(注意它们在 C 模块中,而不是 Python 代码中),当您调用它们时,它会查找它们,注意到它们在外部模块中,并相应地调用它们。initlibraryName

于 2013-07-16T14:00:24.893 回答