Windows下使用gcc的哪种工具可以使控制台程序使用名为semaphores(sem_open)的工作?

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

没有编译错误。 但是在Windows下执行时出现“ sem_open:未实现功能”。

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

谢谢。

aachener 回答:Windows下使用gcc的哪种工具可以使控制台程序使用名为semaphores(sem_open)的工作?

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

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

或者,尽管您不清楚要执行的操作,但是您可以使用semaphore objects的本地Windows API在Windows端口中实现命名信号量。这是一个nice little library,它提供了(大约;可能足以满足您的需求)在Windows本机API之上实现的POSIX信号量,尽管我没有使用它,所以我不能保证其健壮性,而不仅仅是它的健壮性。提供了一个很好的例子。

,

您使用的是MinGW-w64构建的posix线程版本,该版本应在其pthreads实现中包含此版本,因此令我感到惊讶的是

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

本文链接:https://www.f2er.com/3127796.html

大家都在问