在Linux下使用C++开发Nginx模块的编译配置

来源:互联网 发布:windows.old可以移动 编辑:程序博客网 时间:2024/05/29 13:00

Nginx是纯C编写的一个开源服务器,拥有强大的拓展性,用户可以自行编写特定的模块插入到Nginx中实现特定的功能。然而Nginx是一个完全依赖C语言实现的程序,不能满足当前开发需要,于是我们可以通过C++的新特性来对Nginx进行二次开发,使用gcc编译Nginx自身模块,使用C++开发用户模块并通过g++编译,然后使用g++对文件进行链接。
Nginx的自动配置脚本在 ./auto/make文件中,其中包含了编译器,链接器,模块编译的配置信息,我们可以通过更改make文件中的信息实现对Nginx进行混合编译。下面为Nginx中的make文件
更改步骤:
I.增加C++编译器,添加满足C++11特性的flags,确定最终链接器。如图
添加编译器
删除以前LINK这一行,并加入新的代码
CXX = g++ #确定C++的编译器
CXXFLAGS = -std=c++0x -Wall #满足C++11编译要求
LINK = g++ #确定最后的链接器为g++

II.添加编译C++文件的命令信息。如图
这里写图片描述
因为我们编译C++文件需要使用g++,为了不和gcc冲突,我们添加一条新的命令,只是更改编译器类型,后面的参数和上面一行一样。
ngx_cxx=”\$(CXX) $ngx_compile_opt \$(CXXFLAGS) $ngx_use_pch \$(ALL_INCS)”

III.编译文件时,我们通过文件后缀知道使用哪一句命令对其进行编译,于是需要添加新的检测文件后缀代码。如图:
这里写图片描述
首先我们使用echo和cut命令来获取文件后缀,然后判断文件后缀是不是cpp,如果是,则更改编译命令。
ext=echo ${ngx_src}|cut -d . -f 2
ngx_gcc=$ngx_cc
if [ $ext = ‘cpp’ ]; then
ngx_gcc=$ngx_cxx
fi

IV.然后最后一步就是更改编译文件的命令。如图:
这里写图片描述
删除原来那句,添加新的命令。
$ngx_gcc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX

然后大功告成,进入Nginx根目录,调用configure命令,即可生成可以编译C和C++文件的Makefile脚本。可进入./objs目录下可以查看新的Makefile文件。

1 0