初学c++ 第一次添加额外库 pthread

时间:2024-04-09 13:57:58

有俩种办法,第一种是手动下载文件添加

 

第一步 下载文件 官网才靠谱

从别人的帖子: https://blog.csdn.net/fksec/article/details/41517953

获取到官网的地址下载地址: ftp://sourceware.org/pub/pthreads-win32/

进去之后下载最新版本:ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip

然后解压到本地任一目录: F:\Projects\pthreads-w32-2-9-1-release

 

第二步 开始添加 库

初学c++ 第一次添加额外库 pthread

在项目代码管理器哪里,右击项目名字,选择属性,就会出现图示的内容

如图所示,先添加包含目录,点击右边的下拉,选择编辑,然后把include所在的目录复制进去,

就是include目录,如果不是include目录,则#include <pthread.h> 的时候就要取相对路径     #include <./目录/pthread.h>

然后库目录,一样点击右边的下拉,选择编辑,把 .lib文件所在的目录复制进去     x86就是win32版本  x64则是64位版本

然后如下图添加lib文件名,

初学c++ 第一次添加额外库 pthread

到这里库就添加成功了

第三步 写代码加载库试试

报错  pthread.h提示error C2011: “timespec”:“struct”类型重定义

在include前面添加上HAVE_STRUCT_TIMESPEC,这样子就不会重复定义了

#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>

第四步 继续执行,报错找不到pthread.dll 文件

找到dll文件所在的目录,我的是 F:\Projects\pthreads-w32-2-9-1-release\Pre-built.2\dll\x86

把里面的dll文件拷贝到项目目录下(比较建议),或者拷贝到电脑系统的win32目录下,就是环境变量了,

初学c++ 第一次添加额外库 pthread

到这里就安装成功了。


第二种方法就是新方法,自动下载文件

 

这个应该是跨平台的,所以里面的对应的很多版本的库,建议使用第一种方法

下载库的方式参考链接 https://blog.csdn.net/qq_34269988/article/details/100518919

打开vs2015的项目(project),管理NuGet程序包(Manager Nuget Package)-浏览(Browse),在搜索栏中搜索pthread,安装即可(install),然后代码是
#include<pthread.h>
成功加载

第一个报错:
    报错  pthread.h提示error C2011: “timespec”:“struct”类型重定义

    在include前面添加上HAVE_STRUCT_TIMESPEC,这样子就不会重复定义了

    #define HAVE_STRUCT_TIMESPEC
    #include <pthread.h>

第二个报错:
    LNK2019    无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用

    这个时候同上面的第一种方法
    先添加包含目录(包含目录就一个) F:\Projects\m3\packages\pthreads.2.9.1.4\build\native\include
    再添加添加库目录 F:\Projects\m3\packages\pthreads.2.9.1.4\build\native\lib\v100\Win32\Release\dynamic\cdecl
        库目录这里要确定vs版本,他有v100,v110,我直接用了v100,然后对应下面的\Win32\Release\dynamic\cdecl
    再添加附加依赖项(就是上面库目录下面的文件的文件名) libpthread.lib 
    
第三个报错:
    找不到libpthread.dll  同上面的第一种方法
    把目录下的 F:\Projects\m3\packages\pthreads.redist.2.9.1.4\build\native\bin\v100\Win32\Release\dynamic\cdecl
    libpthread.dll 复制到项目目录下

运行成功
 

 

 

 

拿代码测试一下,成功添加库

// m4.cpp : 定义控制台应用程序的入口点。
 

#include "stdafx.h"

#define HAVE_STRUCT_TIMESPEC 1
#include <pthread.h>

#include <iostream>

using namespace std;

#define NUM_THREADS 5

// 线程的运行函数
void* say_hello(void* args)
{
    cout << "Hello Runoob!" << endl;
    return 0;
}

int main()
{
    // 定义线程的 id 变量,多个变量使用数组
    pthread_t tids[NUM_THREADS];
    for (int i = 0; i < NUM_THREADS; ++i)
    {
        //参数依次是:创建的线程id,线程参数,调用的函数,传入的函数参数
        int ret = pthread_create(&tids[i], NULL, say_hello, NULL);
        if (ret != 0)
        {
            cout << "pthread_create error: error_code=" << ret << endl;
        }
    }
    //等各个线程退出后,进程才结束,否则进程强制结束了,线程可能还没反应过来;
    pthread_exit(NULL);
}