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是如何配置的。 –