编程开发 购物 网址 游戏 小说 歌词 地图 快照 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 开发 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
移动开发 架构设计 编程语言 互联网 开发经验 Web前端 开发总结
开发杂谈 系统运维 研发管理 数据库 云 计 算 Java开发
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
  编程开发知识库 -> 互联网 -> 使用c++/c++11开发nginx模块时的两种编译方法 -> 正文阅读
 

[互联网]使用c++/c++11开发nginx模块时的两种编译方法[第1页]

使用c++开发nginx模块时的两种编译方法
Nginx本身只支持使用C语言开发模块,如果我们需要使用C++,那么必须修改源码里的编译脚本
首先,我们不能使用g++编译Nginx自身的C代码,因为C++的语法比C严格很多,而Nginx代码用到了很多C语言的“边角”特性,直接使用g++编译会报大量错误
正确的做法是使用gcc来编译nginx源码,而使用g++来编译我们自己的C++代码,两者可使用文件扩展名区分(*.c和*.cpp),最后使用g++链接所有的目标文件,如果使用其他第三方库
(如boost),可以在configure时用--with-ld-opt参数,
在运行configure时,会调用auto/make这个脚本来生成Makeile, 此Makefile决定了源码的编译链接方式

方法一:修改auto/make脚本

1、链接器LINK改用g++
2、增加C++编译器和编译选项,启用C++11标准
3、生成编译命令时用扩展名区分C源码和C++源码

具体做法(此处nginx版本为1.10.1):

#LINK =  $LINK    					#26行,注释掉原链接器
CXX = g++							#新增C++编译器
CXXFLAGS = -std=c++0x -Wall			#新增C++编译选项,启用C++11,此处可以添加更多参数
LINK = g++							#新增C++链接器



修改# the addons sources(406行)下的代码

if test -n "$NGX_ADDON_SRCS"; then
 
    ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch ddons sources\$(ALL_INCS)"
#定义c++编译命令
	ngx_cxx="\$(CXX) $ngx_compile_opt \$(CXXFLAGS) $ngx_use_pch ddons sources\$(ALL_INCS)"
	
	for ngx_src in $NGX_ADDON_SRCS
    do
		...
	ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
	#获取源码文件后缀,决定使用gcc还是g++
	ext=`echo ${ngx_src} | cut -d . -f 2`
	ngx_gcc=$ngx_cc
	if [ $ext = "cpp" ]; then	
		ngx_gcc=$ngc_cxx
	fi
	
	cat << END                                            >> $NGX_MAKEFILE
 
 $ngx_obj:       \$(ADDON_DEPS)$ngx_cont$ngx_src
        #$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
		$ngx_gcc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
 
 END
      done
此处使用cut来获取文件扩展名,如果使用bash,可以更方便地获取扩展名:
ext = ·echo ${ngx_src:(-4)}·     #bash支持直接获取末尾字符串

方法二:直接修改Makefile文件




对nginx源码运行configure后,在obj目录下生成Makefile文件


CC =    cc
CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -DNGX_HTTP_HEADERS -g
后面添加
CXX =    g++
CXXFLAGS =  -pipe  -O -W -Wall -std=c++11 -Wpointer-arith -Wno-unused-parameter -Werror 
修改
#LINK =  $(CC)
LINK =  $(CXX)
对于每个.cpp文件,手动修改编译方式

修改

objs/addon/snpixel/pixel_module.o:      $(ADDON_DEPS) \
         /home/lijinqi/project/code/snpixel/snpixel/pixel_module.cpp
         #$(CC) -c $(CFLAGS)  $(ALL_INCS) \
		 $(CXX) -c $(CXXFLAGS)  $(ALL_INCS) 
                 -o objs/addon/snpixel/pixel_module.o \
                 /home/lijinqi/project/code/snpixel/snpixel/pixel_module.cpp

另外,在引用nginx源码时,需要加上extern“C”

如:

extern "C" {
    #include <ngx_core.h>
    #include <ngx_http.h>
    #include <nginx.h>
}





  互联网 最新文章
Stanford 英文词性标注(Part-of-speech)缩
基于窗口的实时统计
求解矩阵最短路径问题
SSL握手通信详解及linux下c/c++ SSL Socket
关于服务器上(Docker中)运行Java程序时区
python爬虫系列(六):强大的beautifulsou
[计算机网络笔记]第四部分——网络层 选路算
11.28 北京,念腾讯暑假,不思则惘吧!
web安全之
滑块验证码识别 java版本
上一篇文章      下一篇文章      查看所有文章
加:2016-11-19 01:22:54  更:2016-11-19 01:23:40 
VC(MFC) Delphi VB C++(C语言) C++ Builder 其它开发语言 云计算 Java开发 .Net开发 IOS开发 Android开发 PHP语言 JavaScript
ASP语言 HTML(CSS) HTML5 Apache MSSQL数据库 Oracle数据库 PowerBuilder Informatica 其它数据库 硬件及嵌入式开发 Linux开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-23 23:55:50
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  编程开发知识库