如何让Cython使用目标文件?
我使用了NASM汇编器来编译一个简单的汇编文件(代码如下)。接下来,我打算把这个生成的.obj
文件用Cython链接成一个.pyd
文件,这样Python就可以导入它。简单来说,我需要一种方法告诉Cython包含一个.obj
文件,以便与其他Cython/Python代码一起使用。
首先,这是我的汇编代码:
myfunc.asm
;http://www.nasm.us/doc/nasmdoc9.html
global _myfunc
section .text
_myfunc:
push ebp
mov ebp,esp
sub esp,0x40 ; 64 bytes of local stack space
mov ebx,[ebp+8] ; first parameter to function
; some more code
leave
ret
我通过使用nasm -f win32 myfunc.asm
来编译这段代码。
这样我就得到了myfunc.obj
,这是我想要包含到Cython编译的.pyd
中的文件。
我可能完全搞错了,也可能有更好的方法来做到这一点。有没有一个简单的extern
声明,可以让我在Cython中声明一个外部对象呢?
附言:标签_myfunc
应该是入口点。
1 个回答
1
要从Cython中调用 _myfunc
这个入口点,你需要先声明它:
cdef extern:
void _myfunc()
在声明之后,你就可以像调用Python函数一样,在你的Cython模块中调用 _myfunc()
。当然,你还需要把 myfunc.obj
链接到你的 .pyd
文件中,具体的做法可以参考你之前提问的 回答。