【发布时间】:2021-05-06 18:44:04
【问题描述】:
当我将 winsock2 添加到我的 MinGW-w64 C/C++ 项目时,它会出现 make 错误:
对“InitializeConditionVariable”的未定义引用。
注意:在添加 Winsock 之前,InitializeConditionVariable 已构建并运行正常。
main.c ...
#undef UNICODE
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include "infrastructure.h"
#include "common.h"
#include "bg.h"
#include "aox.h"
#include <windows.h>
#include <ws2tcpip.h>
#include <synchapi.h>
. . .
static void mutexInit()
{
#ifdef WINDOWS
// Initialize critical sections and condition variables
InitializeCriticalSection(&iqSamplesCriticalSection);
InitializeCriticalSection(&bgBufferCriticalSection);
InitializeConditionVariable(&newSamplesAvailable); <<<<<<<<<<<<<<<<<<< ERROR: undefined reference
#else
// Initialize mutexes
pthread_mutex_init(&iqSamplesCriticalSection, NULL);
pthread_mutex_init(&bgBufferCriticalSection, NULL);
pthread_cond_init(&newSamplesAvailable,NULL);
#endif
}
【问题讨论】:
-
您是否有理由不使用
std互斥体和条件变量?另外,我认为某些版本的 MinGW(至少是 MSYS2 版本)包括 Windows 端口的 pthread。 -
HBC: ...因为我“继承”了代码。是的,一种解决方案是用 std 替换互斥锁。
-
"注意:InitializeConditionVariable 在添加 Winsock 之前构建并运行正常" - 我认为这不太可能。 WinSock API 不会影响编译器+链接器处理
InitializeConditionVariable()的方式。其他事情正在发生。
标签: c++ windows mingw winsock mingw-w64