一、写在前面
官方网站提供的pthread-win32下载链接里面给到的是dll文件,属于动态库文件,即使在自己写的工程中已经配置了“/MT”,即多线程静态链接,但是在其他电脑当中使用该程序的时候,还是会报错找不到dll文件的问题,故干脆直接看看能不能找到一份pthread-win32的静态库文件,这样都一齐编译进自己的工程当中,省的还需要提供dll文件到其他电脑使用。
这里记录一下自己在编译pthread-win32当中的步骤。
二、下载链接
主要源码来源有这些地方:
1、pthread-win32的GitHub仓库,截至2024.9.24,最新版本为3.1.0
2、pthread-win32的Sourceware链接,截至2024.9.24,最新版本为2.9.1(这里Sourceware的页面当中,可以找到对应的ftp链接,如果打不开这个链接,直接将ftp改为https,再访问就可以了)
下载之后解压图片如下所示,文件很多的这个是Github仓库下载的,只有三个文件夹的是Sourceware仓库下载的
由于我不太清楚该怎么去编译Sourceware下载得到的文件,故这里只提供别人对这个文件当中的解释,参考链接:
https://www.cnblogs.com/lzhu/p/12032783.html
https://blog.csdn.net/weixin_54730871/article/details/131387382
我只在这里进行详细解释Github仓库下载的内容
三、Github仓库源码编译
打开下载文件路径下的windows文件夹,选择对应的电脑Visual Studio版本,我这里用的是VS2022。
继续打开pthread.2022.sln,分别对“pthread_dll”和“pthread_static_lib”进行右击,然后点击生成,即可。
最后在路径”VS2022->-bin->Debug-Unicode-64bit-x64″文件夹下面可以找到编译生成的dll文件和lib文件
不得不说使用visual studio已经串联起来的工具链来生成对应的库文件真是太方便了,这里还是想吐槽一下从Sourceware下载来的源码文件,我真的不清楚该怎么去编译生成QAQ,Sourceware下载来的源码当中的工程甚至是VS++ 6.0的,太离谱了。
四、pthread-win32动态库、静态库的使用
1、动态库使用
在”VS2022->-bin->Debug-Unicode-64bit-x64″路径下可以找到生成的lib文件和dll文件,动态库需要使用到当中的2个文件,分别是”pthread.dll”和”pthread.lib”
在创建的测试工程当中将包含目录和库目录添加进去即可,如图所示:
再在附加依赖项当中添加”pthread.lib”,如图所示:
最后将”pthread.dll”放在工程的同级目录下即可,如图所示:
最后编译出来的exe文件也需要这个dll文件才能够正常执行。
2、静态库使用
对于静态库使用,除了添加包含目录和库目录之外,只需将附加依赖项修改为”pthread_static_lib.lib”即可,不需要dll文件来帮助寻找函数声明了,如图所示:
五、测试程序
配置完之后进行程序测试,这里使用到了线程创建和互斥锁的功能,创建多线程输出”hello”,使用互斥锁防止线程之间相互打断
#include
#include
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 互斥锁初始化
// 线程函数
void* threadFunc(void* arg) {
int id = *(int*)arg;
// 锁定互斥锁,保证一次只会有一个线程输出
pthread_mutex_lock(&mutex);
std::cout
能正常输出就没问题了~~ ,如图所示。
这里输出的线程顺序不一定一致,因为线程的配置使用的底层来决定的。
六、写在最后
如果对大家有帮助,给我点个赞吧,谢谢~
七、Visual Studio 设置(2024.9.29补充)
一、
这个静态库似乎只能在Visual Studio 2022 的配置为:debug x64 的时候才能正常使用,否则会报错:
具体原因不清楚。。。。。。
我也好想解决这个问题啊
二、找到原因了
在编译静态库的时候,记得将模式选择为Release。。。这样编译出来的才是适合Release版本使用的静态库。
至此,应该全部结束了。。。
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容