How to specify Win32 as output when invoking GCC using MinGW on Windows.如何在Windows上使用MinGW调用GCC时指定Win32作为输出
下面我发布了我的源代码。我的目标是使用C代码接口汇编并生成可执行文件。
我开始使用以下命令NASM组装add.asm Win32的:
nasm -f win32 add.asm
那么它应该有可能中同时使用C调用GCC和目标文件?
gcc -o add add.obj call_asm.c
然而,这导致在一个链接错误:
C:\Users\nze\AppData\Local\Temp\cckUvRyC.o:call_asm.c:(.text+0x1e): undefined reference to `add'
collect2.exe: error: ld returned 1 exit status
如果我代替使用
nasm -f elf add.asm
命令使用ELF文件add.o编译为ELF(此时)
gcc -o add add.o call_asm.c
作品p erfectly。
我该如何告诉GCC我的目标文件是Win32格式,因此它应该在链接之前将call_asm.c编译为Win32? (我想这是问题的核心,请评论我是否正确)。
call_add.c:
#include <stdio.h>
extern int add(int a, int b);
int main()
{
printf("%d", add(7, 6));
}
add.asm:
BITS 32
global _add
_add:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov ebx, [ebp+12]
add eax, ebx
mov esp, ebp
pop ebp
ret
我没有看到这个问题,它看起来像你在这里做例子(例如:)):https://www.hackthissite.org/articles/read/1079 ...(除了你在源代码中做“_”前缀的东西,而不是在命令行中,并且你在相同的步骤中编译+链接.c,但这些都不是问题)。也许尝试拆分编译/链接,并检查objdump .o文件,如果符号符合预期? (或者其他人可以在这里发现问题:)) – Ped7g
在尝试链接(Windows)PE目标文件之前,它可能是GCC生成ELF目标文件的吗? – Shuzheng
你确定你有gingw gcc,而不是交叉编译器吗?我的意思是,也许你安装了一个运行在Windows上的gcc,但编译为Linux。这是一些人想要的东西,所以我并不感到惊讶。这不仅仅是你想要的。运行'gcc -v'来查看你的gcc是如何配置的。 –