月度归档:2014年12月

使用QtCreator配置C++ 11开发调试环境

编译lwan的时候顺道看了下MinGW,发现64位版本也更新到了4.9,感觉自己很久没更新过Windows下的C++环境了,也想体验一下C++ 11,顺手升级了一下。

自己一直使用QtCreator作为C++开发环境,这个IDE个人很喜欢,自动补全功能相当方便,之前在开发Qt程序的时候这几乎是最好的选择,现在也开始出现了收费版本,但是仍然有社区版可用。目前CLion还没有放出正式版本,VS感觉又太重,QtCreator感觉还是一个很不错的选择。

QtCreator的是支持CMake的,正好自己想要学习CMake,于是打算选用CMake作为构建部分的工具。

以下是简要的配置步骤:

1.安装MinGW64

MinGW现在使用安装器的形式进行安装,下载完成一个很小的安装器后进行安装,期间可能是比较漫长的下载过程。不再多说。

2.安装CMake

一样是常规的安装步骤。

3.QtCreator配置

首先是配置编译器路径信息:

工具->选项中进行配置:

配置编译器

之后配置GDB路径信息:

配置GDB

还需要配置上CMake路径信息:

配置CMake

上述步骤完成之后根据之前起好的别名(即上图中的Name字段),选择组成构建套件:

配置构建套件

4.项目级配置

首先自然是常规的新建项目了:

新建项目

在项目类型这里,需要选择使用CMake构建的纯C++项目:

新建使用CMake的纯C++项目

建立完成之后选择好保存的位置

确定项目保存位置

确认项目信息

之后开始配置Debug构建目录

配置Debug构建目录

之后生成CMake相关文件,这里需要指定构建版本为Debug版本,即在参数中指明-DCMAKE_BUILD_TYPE=Debug:

设置CMake参数为Debug构建模式

之后项目会生成一个main.cpp和一个CMakeLists.txt文件:

新项目文件

CMakeLists.txt文件中增加如下配置,告知检查编译器是否支持C++ 11。

之后可以对项目这一构建模式由默认的all重命名为Debug,重新对项目执行CMake操作。

重命名为Debug

重新执行CMake操作

完成上述操作之后,Debug对象的构建配置工作基本完成,可以通过如下代码检验是否能够支持C++ 11的语法:

编辑代码

之后可以尝试构建Debug对象(点击左下角锤子图标):

构建Debug对象

尝试运行:

运行Debug对象

发现能够成功运行,那么至少配置Debug对象这一步就没有问题了。

5.调试

既然生成了Debug对象,那么调试功能自然不能少,尝试打一个断点:

断点调试

可以看出,在断点处查看局部变量等核心调试功能已经能够正常工作,单步、步入等功能也都可以正常工作。

6.发布程序

构建了Debug对象,那么作为生成产物的Release对象自然也不能少。

可以在添加一个构建模式:

添加Release构建模式

Debug对象与Release对象会通过CMake生成不同的配置,需要将二者放到不同的目录中:

配置Release构建目录

CMake参数上的区别在于需要指明-DCMAKE_BUILD_TYPE=Release:

配置CMake的Release参数

之后的构建运行同Debug。

构建运行Release对象

(CentOS下升级GCC参考了这里)。

以上。

CentOS6.5尝试lwan

这些天看到了lwan官网上号称作者历经三年打造的高性能轻量级可扩展Web Server,号称具备了低内存占用、最小化的系统调用次数、对静态文件根据大小智能的处理,预缓存目录信息以及7200行主体代码等特点,到今天(2014年12月26日)为止,Github已经收集到了2000+个star。

其中最吸引我的就是静态文件能达到18w qps,加上它较小的代码体积,于是想要试用一下。

阅读Github上的说明可知,这一软件需要用cmake,无碍,自己手上这台CentOS 6.5的机器上有,不过看到编译参数里面的-flto之后心里凉了半截,这东西CentOS 6.5上带的GCC 4.4.7不能编译啊……

好吧,简直就是噩耗,更换GCC实在不是什么省心的事儿,主要是手上测试机性能实在太差(Pentium双核+2G RAM+160GB HDD,10年的台式机……),估计只编译C/C++支持的话就得一个多小时了,无碍,那么就编译吧。

本次使用的是GCC 4.8.4,使用了日本镜像,速度较快。GCC还依赖三个库:

这三个库安装顺序可以为gmp -> mpfr -> mpc,mpc依赖前两者。

同时,需要通过yum安装glibc-devel以及glibc-devel.i686两个包。

在开始config之前,需要添加环境变量:

否则之前安装的gmp等三个库是没法用上的。

之后便是配置安装:

漫长的编译之后,会在先前的gcc目录(/user/local/gcc)生成,备份原有gcc(需要mv操作)之后通过可以考虑通过

切换版本。

GCC准备好了之后自然就要开始编译,编译时原本出现了一些对于比如luajit以及sqlite3的版本要求,但是作者今天在一个issue中提到似乎已经解决这一问题,这里就先略过,实际出现的话,根据出现问题的cmake提示,将软件依赖改为全路径即可。

编译时需要编译安装luajit以及通过yum安装mysql-devel。

在顶级目录编译完成之后,可以看到在顶级目录下的lwan目录中会生成一个名为lwan的二进制文件,将其拷贝到顶级目录,启动之后就可以体验lwan了。

lwan

关于端口的问题,可以通过修改顶级目录下的lwan.conf修改监听端口。

不过,最后要说的是其实自己的测试结果并不尽如人意,ab并发过万会引起lwan不响应其他请求,而Nginx则没有这类问题,还需要再次试验,确定问题的原因。

为yum安装的Nginx添加模块

Nginx一般都是编译安装,不过它本身也提供了通过yum安装的方式,比如在CentOS 6.5中需要添加的/etc/yum.repos.d/nginx.repo文件内容为:

之后就是常规的yum -y install nginx

通过这一方式安装的Nginx已经可以通过系统服务的方式进行启动,相当便捷,但是很多有趣的第三方插件并没有能够加入,比如header-more-nginx-module,Nginx目前看来不像Tengine是可以后期动态添加模块的,所以解决的方案出了编译安装似乎没有其他的方式了。

不过Nginx编译只生成一个二进制文件,那么,如果获取yum安装的Nginx编译参数,之后使用同一版本的源代码进行编译,之后替换生成文件就可以了。

通过nginx -V就可以看到编译参数(1.6.2):

在获取同版本的nginx源码,同时也获得所需模块的源码后,在获得编译参数中加入--add-module=/path/to/module/source

之后进行make即可。

编译完成之后先备份位于/usr/sbin/中的nginx文件,之后关闭nginx服务,替换文件,重启服务,一个添加了所需模块的nginx应该就能正常工作了。