使用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决定了源码的编译链接方式
2、增加C++编译器和编译选项,启用C++11标准
3、生成编译命令时用扩展名区分C源码和C++源码
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++链接器