如何让Cython使用目标文件?

3 投票
1 回答
1505 浏览
提问于 2025-04-18 12:09

我使用了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 文件中,具体的做法可以参考你之前提问的 回答

撰写回答