gpt4 book ai didi

c - 在 Windows 上使用 gcc 编译时对 'CreateSemaphoreEx' 的 undefined reference

转载 作者:行者123 更新时间:2023-11-30 16:16:15 27 4
gpt4 key购买 nike

我正在尝试使用 gcc 编译器编译一些 WinAPI 代码。然而,每当我调用 CreateSemaphoreEx、CreateMutexEx(以及其他一些 Ex 函数)等函数时,我都会得到“未定义对‘CreateSemaphoreEx’的引用”链接错误。它适用于 CreateSemaphore 或 CreateMutex,但不适用于这些函数的 Ex 版本。

首先我用 mwindows 标志进行编译(gcc main.c -mwindows)然后我尝试手动链接到库(gcc -lkernel32 main.c)我也尝试过使用 CreateSemaphoreExA

我还尝试卸载并重新安装 mingw-w64,甚至尝试切换到 TDM-GCC

我知道如果我将其更改为 CreateSemaphore 调用它可以工作,但是我想使用 Ex 版本。

#include <windows.h>

int main(int argc, char** argv)
{
int initial_count = 0;
int maximum_count = 5;

HANDLE semaphore = CreateSemaphoreEx(0, initial_count, maximum_count, NULL, 0, SYNCHRONIZE | SEMAPHORE_MODIFY_STATE);
}

如何在 Windows 上使用 gcc 编译器访问这些 WinAPI 函数(如果可能的话)。

-------- 完整的编译器输出 ---------

main.c: In function 'main':
main.c:8:21: warning: implicit declaration of function 'CreateSemaphoreEx'; did you mean 'CreateSemaphoreA'? [-Wimplicit-function-declaration]
HANDLE semaphore = CreateSemaphoreEx(0, initial_count, maximum_count, NULL, 0, SYNCHRONIZE | SEMAPHORE_MODIFY_STATE);
^~~~~~~~~~~~~~~~~
CreateSemaphoreA
main.c:8:21: warning: initialization of 'HANDLE' {aka 'void *'} from 'int' makes pointer from integer without a cast [-Wint-conversion]
C:\Users\Nexwave\AppData\Local\Temp\cc3ncRYX.o:main.c:(.text+0x49): undefined reference to `CreateSemaphoreEx'
collect2.exe: error: ld returned 1 exit status

编辑1:我知道链接。我的问题是 mingw-w64 使用的 kernel32 库是否与 Microsoft 链接器使用的不同。如果不同,那么为什么在实际的 Kernel32.lib 中没有可用的 CreateSemaphoreEx(以及其他一些 Ex 函数)的定义

最佳答案

第一个诊断表明的问题:

implicit declaration of function 'CreateSemaphoreEx'

其他错误是由此级联而来的。一般来说,您应该始终修复第一个编译器诊断,然后再过分担心其他编译器诊断。

请注意,我建议使用标准编译器开关,以便针对此错误情况显示“错误”而不是“警告”,并中断编译。有些人看到“警告”一词并认为“哦,这只是一个警告,并不重要,我会忽略它”,但在这种情况下这是一个错误。

<小时/>

上面的错误消息意味着您的系统 header 未定义CreateSemaphoreEx。为什么是这样?以下是主要的可能性:

  • 您使用的是旧版本的 Windows;该功能是在 Windows Vista 中添加的,如果您使用的是 XP,则将无法访问该功能。 (如果系统被检测为 Vista 之前版本,则 Windows header 不会定义原型(prototype)和宏)。
  • 您使用的是旧版本的 mingw-w64,没有此功能。

关于c - 在 Windows 上使用 gcc 编译时对 'CreateSemaphoreEx' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com