Assembly 预处理器在汇编代码中不工作

Assembly 预处理器在汇编代码中不工作,assembly,Assembly,我有一个头文件,它定义了以下内容: #define BLA 1 现在,我想将此头文件包括到我的汇编代码中: #include "myinc.h" .file "main.c" .intel_syntax noprefix .def ___main; .scl 2; .type 32; .endef .section .rdata,"dr" LC0: .ascii "ABCDEFGHIJK.\0" .text

我有一个头文件,它定义了以下内容:

#define BLA 1
现在,我想将此头文件包括到我的汇编代码中:

#include "myinc.h"

    .file   "main.c"
    .intel_syntax noprefix
    .def    ___main;    .scl    2;  .type   32; .endef
    .section .rdata,"dr"
LC0:
    .ascii "ABCDEFGHIJK.\0"
    .text
    .globl  _main
    .def    _main;  .scl    2;  .type   32; .endef
_main:
LFB6:
    .cfi_startproc
    push    ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    mov ebp, esp
    .cfi_def_cfa_register 5
    and esp, -16
    sub esp, 16
    call    ___main
    mov DWORD PTR [esp], OFFSET FLAT:LC0
    call    _puts
    mov eax, 0
    mov ebx, BLA
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
LFE6:
    .ident  "GCC: (GNU) 4.8.1"
    .def    _puts;  .scl    2;  .type   32; .endef
不幸的是,生成输出如下所示:

as "-ID:\\Dev\\ws\\Foobar\\inc" -o "src\\main.o" "..\\src\\main.S" 
gcc -o Foobar.exe "src\\main.o" 
src\main.o:main.c:(.text+0x21): undefined reference to `BLA'
collect2.exe: error: ld returned 1 exit status
虽然头文件可以解析,但我得到了对BLA'
未定义引用。如果我直接在
S`文件中定义
BLA
,我会得到相同的结果


你知道为什么会发生这种情况吗?

汇编程序
,因为它是一个纯粹的汇编程序。它不像
gcc
(需要时调用多个程序,包括预处理器)那样是前端

您需要自己运行预处理器,或者对汇编文件也使用
gcc
前端程序:

gcc -ID:/Dev/ws/Foobar/inc -c ../src/main.S
gcc -o Foobar.exe ../src/main.o


gcc
前端程序将以
.S
结尾(大写S)的文件识别为需要预处理的汇编程序文件,并将通过预处理器运行它们。它还将以
.s
(小写s)结尾的文件识别为不需要预处理的汇编程序文件。

汇编程序
作为
是一个纯汇编程序。它不像
gcc
(需要时调用多个程序,包括预处理器)那样是前端

您需要自己运行预处理器,或者对汇编文件也使用
gcc
前端程序:

gcc -ID:/Dev/ws/Foobar/inc -c ../src/main.S
gcc -o Foobar.exe ../src/main.o


gcc
前端程序将以
.S
结尾(大写S)的文件识别为需要预处理的汇编程序文件,并将通过预处理器运行它们。它还将以
.s
(小写s)结尾的文件识别为不需要预处理的汇编程序文件。

汇编程序
as
不会为您运行C预处理器。如果您想在汇编文件上运行C预处理器,请考虑通过<代码> GCC < /代码>执行汇编程序:<代码> Gcc-ID:\\\\\\\Wo\\FoBar \O-SRC \Maun.O.\SRC\\Me.S.E/COD>。SeNeNoTo: C预处理器在Python、艾达或PACSL中都不起作用。这仅仅是因为它们是完全不相关的语言,比如汇编语言。汇编程序as不为您运行C预处理器。如果您想在汇编文件上运行C预处理器,请考虑通过<代码> GCC < /代码>执行汇编程序:<代码> Gcc-ID:\\\\\\\Wo\\FoBar \O-SRC \Maun.O.\SRC\\Me.S.E/COD>。SeNeNoTo: C预处理器在Python、艾达或PACSL中都不起作用。因为它们是完全不相关的语言,比如汇编语言。