【问题标题】:Why does a linux thread function work in windows?为什么linux线程函数可以在windows中工作?
【发布时间】:2011-11-26 06:28:15
【问题描述】:

我正在我的 windows 机器上用 cygwin 包中的 gcc 编译这个程序

#include<stdio.h>
#include<pthread.h>

void* thread_function(void)
{
    printf("hello");
}
int main(int argc,char *argv[])
{
    pthread_t thread_id[argc-1];
    int i;
    int status;
    printf("argc is %d ",argc-1);
    for(i=0;i<argc-1;i++)
    {
        pthread_create (&thread_id[i], NULL , &thread_function, NULL);
    }  

    for(i=0;i<argc-1;i++)
        pthread_join(thread_id[i],NULL);   
}

它编译并创建一个.exe

当我在 cmd 中运行它时

./a.exe 2 3

输出是

argc is 2 hellohello

Question :

pthread.h 和这个线程函数都和linux os 相关,那么为什么它可以在windows 上运行呢?

【问题讨论】:

    标签: c windows linux pthreads cygwin


    【解决方案1】:

    它们不是“Linux 线程”,它们是 P​OSIX thread​s。 Cygwin 提供了一个 POSIX 兼容层,包括pthread.h

    【讨论】:

    • 他们可以。但欢迎兼容层呈现它喜欢的任何界面。
    • 所以你的意思是,当我想制作我的 linux 应用程序的 windows 版本时,我应该以这种方式编译我的 linux 应用程序源代码(在 cygwin 等兼容层程序的帮助下)及其 .exe准备好了吗?
    • 视情况而定。 Cygwin 不提供一切,或者您的应用可能不需要 Cygwin 提供的东西。
    • 还有其他这样的程序/包可以提供所有这些吗?
    • Mr.32:有MinGW,它提供了POSIX的一小部分,以及大部分Win32 API。它还有一个 pthreads 版本,并且比 Visual Studio 更符合 C99(如果不是完全)。
    【解决方案2】:

    在 pthread.h 之外,cygwin 是一个完整的类 unix 环境,主要基于 gnu 实用程序,还有一些 solaris 的东西。

    你可以在cygwin环境中编译和使用unix软件,但是你不能像那样分发你的exe文件。每台 Windows 机器都需要安装和配置 cigwin 环境。

    由于操作系统设计差异,Cygwin 应用程序在 Windows 环境中并非 100% 高效或可靠。就像使用 wine 时 Windows 应用程序不是 100% 可靠或高效一样,尽管 Cygwin 应用程序是在 Windows 中本地编译的。

    其他环境/库/编译器也提供了使用 posix 函数的方法。最成功的一个是 Mingw,它提供了在 win32 调用之上实现的库,并且不需要额外的环境。

    此外,Cygwin 应用程序必须符合 GPL2 条款,因此在使用 cygwin 编译的二进制文件时,您必须将源代码与应用程序一起提供,Mingw 运行时库正式在公共领域,因此您可以保留源代码如果你愿意,可以给自己。

    http://www.mingw.org/
    http://en.wikipedia.org/wiki/MinGW
    http://en.wikipedia.org/wiki/Cygwin

    【讨论】:

    • MinGW 不为 Windows 提供 POSIX 层。这正是 Cygwin DLL 的用途。 MinGW 代表“Minimalist GNU for Windows”,意思是 gcc 和 GNU 工具链的其余部分以及用于访问 Windows 系统库的标头。
    • @ak2 那就称之为简约 posix。 GNU 不是 Unix,但很好地基于它。尽管 mingw 是极简主义的,但 Codelite 和 Code::Blocks all in one downloads 上添加了很多东西。从源代码构建,无论如何您都会添加更多内容以获得更多功能。 Cigwin是一个完整的环境,带有sys V init,packing/libc/shells/etc,Mingw是一个编译器+库+实用程序。
    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多