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

如何使用cl.exe将.i预处理文件转换为.asm汇编文件

如何用cl.exe将预处理后的.i文件转换为汇编文件?

测试用C代码

#include <stdio.h>
int main(){   
    printf("this a test");       
    return 0;
}

问题场景

已通过cl /P code.c成功生成预处理文件code.i,但尝试将code.i转换为汇编文件时,使用以下两个命令均报错:

错误命令1:cl /Fa code.asm code.i

错误输出:

Microsoft (R) C/C++ Optimizing Compiler Version 19.20.27508.1 for x86
Copyright (C) Microsoft Corporation. All rights reserved.

cl : Command line warning D9024 : unrecognized source file type 'code.as', object file assumed
cl : Command line warning D9024 : unrecognized source file type 'code.i', object file assumed
Microsoft (R) Incremental Linker Version 14.20.27508.1
Copyright (C) Microsoft Corporation. All rights reserved.

/out:code.exe

code.asm

code.i

LINK : fatal error LNK1181: cannot open input file 'code.asm'

错误命令2:cl /Fa code.i

错误输出:

cl /Fa code.i Microsoft (R) C/C++ Optimizing Compiler Version
19.20.27508.1 for x86 Copyright (C) Microsoft Corporation. All rights reserved.

cl : Command line warning D9024 : unrecognized source file type
'code.i', object file assumed Microsoft (R) Incremental Linker Version
14.20.27508.1 Copyright (C) Microsoft Corporation. All rights reserved.

/out:code.exe code.i code.i : fatal error LNK1107: invalid or corrupt
file: cannot read at 0x321AD

解决方法

问题根源有两点:

  1. cl.exe默认不识别.i文件为C源文件,需强制指定文件类型
  2. /Fa参数的正确用法是直接紧跟汇编文件名(无空格),不能将目标汇编文件当作源文件传入

正确命令示例

1. 生成默认名称的汇编文件(code.asm)

cl /Tc code.i /Fa

2. 指定自定义汇编文件名(比如output.asm)

cl /Tc code.i /Faoutput.asm

注意:/Fa和文件名之间不能有空格,否则cl会误将文件名当作源文件处理,这也是第一个命令报错的关键原因。

3. 仅编译不链接(避免生成可执行文件)

如果只需要汇编文件,不需要链接生成exe,可添加/c参数跳过链接步骤:

cl /c /Tc code.i /Fa

参数说明

  • /Tc:强制将后续文件当作C源文件处理,解决.i文件不被识别的问题
  • /Fa:生成汇编文件,若紧跟文件名则指定输出名称,否则使用源文件名+.asm
  • /c:仅执行编译步骤,不进行链接,避免不必要的链接错误

内容的提问来源于stack exchange,提问作者Soup Creamy Chicken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:16:26