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 InstallerIfWaitForDebugEvent
安装了它。如果得到正确解决,那么这就强烈表明链接器从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;
}