如何静态链接pthreads-win32

转自: http://blog.csdn.net/win32asn/article/details/2346430

      pthreads-win32是windows下的pthread库,它默认采用的是动态链接库的链接方式,因此在使用该库的程序都需要带上一个动态库pthreadVC2.dll,感觉挺不方便的,下面介绍如何静态链接pthreads-win32:

      首先要编译静态库: 从ftp://sources.redhat.com/pub/pthreads-win32/下载最新的库安装包,笔者下载的是pthreads-w32-2-8-0-release.exe,自解压到一个目录,用vc7打开pthreads.2目录下的pthread.dsw,会提示工程版本转换,选择全是,然后打开该工程的属性页,在“常规”选项页的配置类型选择“静态库(.lib)”,在“c/c++”选项页的预处理器定义删除_USRDLL和PTW32_BUILD,添加PTW32_STATIC_LIB,确定保存即可。当然,你需要根据你的需要选择运行时库的类型。最后重新生成pthread便可生成我们需要的pthread.lib。

      下面讲述如何使用前面生成的静态库:新建一个控制台工程,将pthread.lib拷贝到工程目录,在预处理器定义中添加PTW32_STATIC_LIB,附加包含目录添加pthreads-win32代码所在目录,笔者是E:/pthreads/pthreads.2,附加依赖项添加Ws2_32.lib和pthread.lib即可,简单使用代码如下:

#include <iostream>
#include "pthread.h"

void * Function_t(void * Param)
{
 std::cout << "我是线程!" << std::endl;
 pthread_t myid = pthread_self();
 printf( "线程ID = %d",  myid );
 return NULL;
}

int main()
{

#ifdef PTW32_STATIC_LIB
 pthread_win32_process_attach_np();
#endif

 pthread_t pid;
 pthread_attr_t attr;
 pthread_attr_init(&attr);
 pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
 pthread_create(&pid, &attr, Function_t, NULL);
 std::cout << "========================================" << std::endl;
 getchar();
 pthread_attr_destroy(&attr);

#ifdef PTW32_STATIC_LIB
 pthread_win32_process_detach_np();
#endif

 return 1;
}

其中

#ifdef PTW32_STATIC_LIB
 pthread_win32_process_attach_np();
#endif

#ifdef PTW32_STATIC_LIB
 pthread_win32_process_detach_np();
#endif

对于静态链接方式非常重要,如果没有这段代码,线程将创建失败。

你可能感兴趣的:(windows,function,null,Build)