Я пытаюсь скомпилировать некоторый код WinAPI с помощью компилятора gcc.Однако всякий раз, когда я вызываю такие функции, как 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);
}
Как получить доступ к этим функциям WinAPI с помощью компилятора gcc в Windows (если это вообще возможно).
-------- Полный вывод компилятора ---------
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: Я знаю о связывании.Мой вопрос заключается в том, отличается ли библиотека kernel32, используемая mingw-w64, от библиотеки компоновщика Microsoft.И если он отличается, то почему нет определения для CreateSemaphoreEx (и некоторых других функций Ex), которые доступны в реальном Kernel32.lib