Winapi 函数的未定义引用,即使它应该是可访问的

Winapi 函数的未定义引用,即使它应该是可访问的,winapi,rust,Winapi,Rust,错误消息: error: linking with `x86_64-w64-mingw32-gcc` failed: exit code: 1 | <a lot of paths and args> C:\Users\wikto\IdeaProjects\test/src/main.rs:297: undefined reference to `WaitForDebugEventEx' 我是否有什么做错了,或者可能是mingw32 gcc有问题?尝试使用extern“stdca

错误消息:

error: linking with `x86_64-w64-mingw32-gcc` failed: exit code: 1
  |
<a lot of paths and args>
C:\Users\wikto\IdeaProjects\test/src/main.rs:297: undefined reference to `WaitForDebugEventEx'

我是否有什么做错了,或者可能是mingw32 gcc有问题?

尝试使用
extern“stdcall”
extern“system”
而不是
extern“C”
。是在Windows 10中引入的。是否已安装并正确设置Windows 10 SDK,以便链接器可以发现导入库?MinGW的32位版本通常已经过时了,这让人无可奈何。@I不可检测是的,根据VS安装程序,我已经安装了Win10 SDK 10.0.19041.0。另一个可能有用的信息是,当我将
WaitForDebugEventEx
更改为
WaitForDebugEvent
时,程序会正确构建。“正确设置”-我不确定这一点,我只是通过VS InstallerIf
WaitForDebugEvent
安装了它。如果得到正确解决,那么这就强烈表明链接器从Windows 10之前的SDK中获取了kernel32.lib。您可以使用一个工具,如了解kernel32.lib的引入位置,并从中学习。
mod winapi;
use winapi::*;

unsafe fn debug_loop(&mut self, process_id: DWORD) {
    let mut continue_status = DBG_CONTINUE;
    let mut debug_event = std::mem::zeroed::<DEBUG_EVENT>();
    let debug_event = &mut debug_event;
    while WaitForDebugEventEx(debug_event, INFINITE) != 0 {
        //something
    }
}
#[link(name = "Kernel32")]
extern "C" {
    pub fn WaitForDebugEventEx(
        lpDebugEvent: *mut DEBUG_EVENT,
        dwMilliseconds: DWORD,
    ) -> BOOL;
}