[英]nasm win32 programming “undefined reference to…”
我正在嘗試在Windows XP的mingw32中將nasm和ld的簡單代碼匯編並鏈接在一起,這是我的代碼,
extern _CopyFileA
section .data
src dd 'abc.txt',0
dest dd 'xyz.txt',0
false dd 'FALSE',0
section .text
global _WinMain@16
_WinMain@16:
push src
push dest
push false
call _CopyFileA
add esp, 12
ret
我正在嘗試在winbase.h
使用CopyFileA
函數
組裝工作正常
nasm -f win32 copy.asm
但ld
失敗
ld file.obj -lkernel32
它說,
undefined reference to `CopyFileA'
Win32 API使用stdcall
調用約定 ,這意味着被調用方負責清理堆棧。 因此,您不應該自己執行此操作(即在調用CopyFileA
之后不應該add esp, 12
)。
stdcall
調用約定的另一個效果是,函數名稱用@
-sign 修飾 ,后跟函數參數的大小(以字節為單位)(如_WinMain@16
)。 CopyFile
函數接受3個參數,每個參數4個字節(總共12個字節),因此您應將其稱為( _CopyFileA@12
)。
最后,您應該通過調用ExitProcess
結束Windows應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.