在Window和Linux下使用Zthread库(跨平台高级面向对象的线性和sycnchronization 库)
ZThread库是一个开源的跨平台高级面向对象的线性和sycnchronization 库,以运行POSIX 和Win32 系统中的C++程序。
ZThread库的主页:http://zthread.sourceforge.net
最新版本Zthread远吗下载地址: http://prdownloads.sourceforge.net/zthread/ZThread-2.3.2.tar.gz
ZThread文档:http://zthread.sourceforge.net/documentation.html
一、在Windows下使用ZThread
首先,下载ZThread,解压到某个目录下,我解压到D:\libs\ZThread-2.3.2\中。
方法1:包含源文件直接编译(不推荐)
1.在vs2010中,新建一个新的win32 控制台项目,选择空项目。
2.在源目录下新建一个main.cpp文件,在http://zthread.sourceforge.net/html/classZThread_1_1Thread.html 中复制一段示例代码拷贝到main.cpp中。
3.在项目的配置属性中,VC++目录的包含目录中增加ZThread的头文件目录,我这里是:D:\libs\ZThread-2.3.2\include。配置属性分DEBUG和RELEASE两个,默认选择的是DEBUG配置,但最好两个都配置一下,否则生成RELEASE版本时会报错
4.在项目中新建一个文件夹,名字随意,我的叫ZThread,然后选择这个文件夹,右键选择添加->现有项,将ZThread解压目录中的src目录的所有cxx文件都加入到这个目录中
然后现在可以编译了,正常来说,应该编译通过并且成功启动程序了。
但也有可能出现一些错误:
错误一:error C2664: “GetModuleHandleW”: 不能将参数 1 从“const char [13]”转换为“LPCWSTR”
这个是由于vs2010的项目设置默认采用了unicode字符集导致的,可以在项目属性中将字符集改为多字节即可,也可以在GetModuleHandle函数的字符串参数加上_T()包含,改为GetModuleHandle(_T("Kernel32.dll"));
方法2:编译成静态库
1.在vs2010中,新建一个新的win32 控制台项目,我取名为ZThread.,项目类型选择为静态库。
2.在项目的配置属性中,VC++目录的包含目录中增加ZThread的头文件目录,我这里是:D:\libs\ZThread-2.3.2\include。配置属性分DEBUG和RELEASE两个,默认选择的是DEBUG配置,但最好两个都配置一下,否则生成RELEASE版本时会报错
3.在项目源目录中,右键选择添加->现有项,将ZThread解压目录中的src目录的所有cxx文件都加入到这个目录中
然后现在可以编译了,正常来说,应该编译通过并且成功生成了ZThread.lib静态库。
但也有可能出现一些错误:
错误一:error C2664: “GetModuleHandleW”: 不能将参数 1 从“const char [13]”转换为“LPCWSTR”
这个是由于vs2010的项目设置默认采用了unicode字符集导致的,可以在项目属性中将字符集改为多字节即可,也可以在GetModuleHandle函数的字符串参数加上_T()包含,改为GetModuleHandle(_T("Kernel32.dll"));
静态库的使用方法是:
在我们的程序的工程属性的VC++目录的包含目录中,增加ZThread的头文件目录。
在程序代码中,增加#pragma comment(lib, “ZThread.lib”)声明,同时,需要将ZThread.lib文件放在我们的源目录下,跟代码放一起。
方法3,编译成动态库DLL
跟方法2差不多,只不过项目类型选择为动态库。其他步骤一样,不再详述,编译成功后,会生成ZThread.lib, ZThread.dll。
使用动态库的方法跟静态库一致,不同的是,使用动态库的程序在运行时需要ZThread.dll文件。
至此,静态链接库和动态链接库我们就说完了,我们做一下对比和补充:
两个lib文件的不同
我们发现,无论是静态链接库还是动态链接库,最后都有lib文件,那么两者区别是什么呢?其实,两个是完全不一样的东西。两个ZThread.lib大小都不同,静态库对应的lib文件叫静态库,动态库对应的lib文件叫导入库。实际上静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。
对于静态链接库,我们在编译和链接的时候已经将所有的代码都导入进来,因此,当生成可执行文件以后,可执行文件包含所有的代码。因此,在可执行文件运行时就不再需要静态库了,这也是为什么我们删掉ZThread.lib程序照样执行;而对于动态链接库,实际上,可执行文件不包含DLL中的内容,只是通过导入库(.lib)知道了相应的地址信息,因此,可执行文件在运行时动态得去加载DLL,这也是为什么我们删掉ZThread.dll后程序就不能执行了。
对于DLL,我们是可以不要lib文件的。如果不要lib文件,我们可以通过函数指针的使用达到我们的目的。
二、在Linux下使用ZThread
在linux下,直接通过三部曲就可以完成了,非常简单
./configure
./make
./make install
如果在make时遇到错误:
../include/zthread/Guard.h: In destructor 'ZThread::Guard<LockType, LockingPolicy>::~Guard()':
../include/zthread/Guard.h:494: error: there are no arguments to 'isDisabled' that depend on a template parameter, so a declaration of 'isDisabled' must be available
只需 先export CXXFLAGS=-fpermissive,然后再执行
./configure
./make
./make install
就可以了
第二种方法还应该要把创建静态库时的预编译头勾掉
http://www.cnblogs.com/moodlxs/archive/2012/10/16/2725329.html
在Window和Linux下使用Zthread库(跨平台高级面向对象的线性和sycnchronization 库)的更多相关文章
- 在Window和Linux下使用Zthread库
ZThread库是一个开源的跨平台高级面向对象的线性和sycnchronization 库,以运行POSIX 和Win32 系统中的C++程序. ZThread库的主页:http://zthread. ...
- window和Linux下的软链接
window下开启软链接命令: mklink /J "D:\IdeaProjects\bms_work\smartcity_govnet\base_web\target\base_web\ ...
- LINUX下C语言编程调用函数、链接头文件以及库文件
LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...
- 负载均衡---在window与linux下配置nginx
最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx,sq ...
- 【转】玩玩负载均衡---在window与linux下配置nginx
最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx,sq ...
- 玩玩负载均衡---在window与linux下配置nginx
最近有些时间,开始接触负载均衡方面的东西,从硬件F5再到Citrix Netscalar.不过因为硬件的配置虽然不复杂,但昂贵的价格也让一般用户望而却步(十几万到几十万),所以只能转向nginx, ...
- 关于File.separator 文件路径:window与linux下路径问题(“No such file or diretory ”异常解决方案)
最近有个在页面上传Excel文件至服务器指定目录并进行数据校验.最后入库及进行进一步处理的应用情境,我写好代码在模拟环境下测试,完全没问题:但客户试用的时候,却老是报告“No such file or ...
- window和Linux下Redis的安装及运行
Window篇 Redis的官方目前公开的版本分为三个类别Stable.Beta和Unstable.这些版本一般只是针对Linux.Unix内核的系统,虽然官方的不支持Window系统,但是微软开源 ...
- mongodb在window下和linux下的部署 和 安装可视化工具
Windows安装 安装Mongo数据库: 在发布本文的时间官方提供的最新版本是:2.4.0 ,如果不做特殊声明,本教程所用的版本将会是这个版本. 第一步:下载安装包:http://www.mo ...
随机推荐
- android --Activity生命周期具体解释
一. 再探Activity生命周期 为了研究activity的生命周期,简单測试代码例如以下. package com.example.testactivity; import android.app ...
- 学习鸟哥的Linux私房菜笔记(2)——基础指令
ls :列出文件和目录 ls -l :列出文件和目录的详细信息 ls -a:列出所有的文件和目录(包括隐藏目录) cp:拷贝文件 cp 源文件目录 目标目录 cp -r :拷贝目录 mv :移动或重 ...
- BZOJ 1509 逃学的小孩 - 树型dp
传送门 题目大意: 在一棵树中, 每条边都有一个长度值, 现要求在树中选择 3 个点 X.Y. Z , 满足 X 到 Y 的距离不大于 X 到 Z 的距离, 且 X 到 Y 的距离与 Y 到 Z 的距 ...
- 配置ANDROID_HOME
原文:配置ANDROID_HOME 1.在环境变量中设置一个名为ANDROID_HOME,变量值为SDK路径 2.添加至Path中 备注:ANDROID_HOME的变量值仅允许一个
- Java native代码编译步骤简书
Java native代码编译步骤简书 目的:防止java代码反编译获取密码算法 (1)编写实现类com.godlet.PasswordAuth.java (2)编译java代码javac Passw ...
- Swift语言高速入门
Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- Windows10内置ubuntu子系统安装后中文环境设置
原文:Windows10内置ubuntu子系统安装后中文环境设置 第一开启相关设置,使用小娜(Win键+c)直接查找关键字打开更快. ①设置→查找"针对开发人员"→开发人员模式 ...
- 性能测试以及对redis
Ignite性能测试以及对redis的对比 测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测 ...
- Leetcode 319 Bulb Switcher 找规律
有n盏关着的灯,第k轮把序号为k倍数的关着的灯打开,开着的灯关闭. class Solution { public: int bulbSwitch(int n) { return (int)sqrt( ...
- WPF4文字模糊不清晰、边框线条粗细不一致的解决方法
原文:WPF4文字模糊不清晰.边框线条粗细不一致的解决方法 软件测试过程中发现在一台1600*900的分辨率电脑上文字模糊,甚至某些个文字出现压缩扭曲 经过实践,发现按下面方法能解决一点问题: 在窗口 ...