在 Windows 下使用 gcc 的哪个工具可以创建一个控制台程序,其中包含工作命名信号量 (sem_open)?

What tool with gcc under Windows can make a console program with working named semaphores (sem_open)?

尝试做一个gcc编译的可移植(Linux和Windows)控制台程序。 对于 Windows 7,我使用 gcc 版本 8.1.0,i686-posix-dwarf-rev0,由 MinGW-W64 项目构建。

没有编译错误。 但是在 Windows.

下执行 "sem_open: Function not implemented"

其他一些带有 gcc 的工具(如 Cygwin 或 MSYS2)是否支持带有 sem_open() 的命名信号量?

谢谢。

我不会将 Cygwin 或 MSYS2 仅仅描述为 "tools",因为它们是完整的软件发行版,每个都依赖于一个特殊的运行时库。但是,MSYS2 不能解决您的问题。与 Cygwin 不同,MSYS2 的目的不是提供完整的 POSIX 仿真层。参见 How does MSYS2 differ from Cygwin

如果您使用 Cygwin 工具链构建问题,您将支持最常见的 POSIX API,包括 sem_open。但是,您的程序将依赖于整个 Cygwin 运行时,因此您至少必须包含 cygwin1.dll。

或者,虽然您并不完全清楚自己要做什么,但您可以使用本机 Windows API 在 Windows 端口中实现命名信号量semaphore objects. Here's a nice little library 在 Windows 的原生 API 之上实现的 POSIX 信号量(大约;可能足以满足您的需求),尽管我没有使用过它,所以我不保证它的健壮性,只是它提供了一个很好的例子。

您使用的是 MinGW-w64 构建的 posix 线程版本,它的 pthreads 实现中应该有这个,所以我很惊讶它失败了。

您可以尝试使用 http://winlibs.com/ 构建的 GCC 9.2.0 + MinGW-w64 7.0.0 吗?