Cygwin Windows下使用gcc的哪个工具可以使控制台程序具有工作命名信号量(sem_open)?

Cygwin Windows下使用gcc的哪个工具可以使控制台程序具有工作命名信号量(sem_open)?,cygwin,semaphore,mingw-w64,msys2,Cygwin,Semaphore,Mingw W64,Msys2,尝试做一个gcc编译的可移植(Linux和Windows)控制台程序。 对于Windows7,我使用由MinGW-W64项目构建的gcc版本8.1.0,i686-posix-dwarf-rev0 没有编译错误。 但在Windows下执行时出现“sem_open:Function not implemented” 另一个带有gcc的工具(如Cygwin或MSYS2)是否支持带有sem_open()的命名信号量 谢谢。我不会将Cygwin或MSYS2描述为纯粹的“工具”,因为它们是整个软件发行版,每

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

没有编译错误。 但在Windows下执行时出现“sem_open:Function not implemented”

另一个带有gcc的工具(如Cygwin或MSYS2)是否支持带有sem_open()的命名信号量


谢谢。

我不会将Cygwin或MSYS2描述为纯粹的“工具”,因为它们是整个软件发行版,每个发行版都依赖于一个特殊的运行时库。但是,MSYS2并不能解决您的问题。与Cygwin不同,MSYS2的目的不是提供完整的POSIX仿真层。看

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


或者,尽管您还不清楚要做什么,但可以在Windows端口中使用本机Windows API实现命名信号量。这是一个提供(近似;可能足够满足您的需要)在Windows本机API上实现的POSIX信号量的示例,尽管我没有使用它,所以我不保证它的健壮性,更重要的是它提供了一个很好的示例。

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


您能试用GCC 9.2.0+MinGW-w64 7.0.0版本吗?

谢谢!我安装了最新的cygwin。并使用它的gcc来编译我的程序。现在,sem_open在Windows下正常工作。该程序在Linux下也能正常运行。