You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境Cython调用C内联汇编报unresolved external symbol asm错误如何解决

错误原因

你当前使用的是MSVC编译器进行代码编译,MSVC和GCC的内联汇编语法不兼容:

  • 32位模式下MSVC仅支持__asm关键字实现内联汇编,不识别GCC风格的asm关键字
  • 64位模式下MSVC直接不支持内联汇编写法,你代码中的asm("nop")会被MSVC判定为未定义的外部函数,因此链接阶段抛出找不到asm符号的错误。

解决方法

你可以根据自己的使用场景任选以下方案:

方案1:更换MinGW编译器编译

MinGW是GCC的Windows移植版本,原生支持GCC风格的asm内联汇编语法,你只需要先安装配置好MinGW环境,编译时指定编译器即可:

python setup.py build_ext --inplace --compiler=mingw32 && python program.py

方案2:适配MSVC编译规则

如果你需要坚持使用MSVC编译,分场景修改:

  • 若你编译的是32位程序:将asm("nop")替换为MSVC专属的32位内联汇编写法__asm { nop }即可
  • 若你编译的是64位程序:MSVC 64位模式不支持内联汇编,你需要将汇编代码单独写入.asm文件,用MASM编译为目标文件后和Cython生成的C代码共同链接即可。

方案3:使用MSVC内置函数替代(针对nop指令场景)

如果你只是需要调用nop指令,不需要写其他自定义汇编,直接使用MSVC提供的内置函数__nop()即可,无需自行实现汇编逻辑,修改后的代码如下:

cdef extern from *:
    """
    #include <stdio.h>
    #include <intrin.h>
    void print_endln(){
       __nop();
    }
    """
    void print_endln() 

print_endln()

该写法同时兼容32位和64位的MSVC编译环境。

内容的提问来源于stack exchange,提问作者hashy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 17:15:03