nginx c++模块编译

不论是c还是c++,nginx的第三方模块编写没什么太区别,但是提供给nginx调用的,必须是纯c的接口。

先说下为什么不能使用c++编译nginx,nginx是纯c写的,而且c++是兼容c的,但是用c++(g++)编译nginx的框架,就会出一大堆的错误。是nginx的问题吗,那肯定不是,主要就是c和c++语法的严格问题。举个例子

main()

{

fun() ;

}

fun()

{

}

这样的代码使用c编译是没问题的,但是使用c++编译就会报错,c的语法没那么严格。而nginx中很多这样的风格代码,因此使用c++编译不了nginx。

因此可以使用c编译nginx,c++编译我们自己的模块代码,最后使用c++进行链接,将全部的.o文件链接即可。

下面就说过程方法

主要有2种方法,1是改写make,2是改写Makefile

前者是一劳永逸的方法。

后者只要重新执行了configure就的重新去手动修改Makefile,当然也可以写个自动化shell脚本来代替手动修改。

所以先说方法二

跟nginx对接的地方,和c版一样,只不过代码中关于nginx需要用的c部分还是的使用c的编译方式
extern "C"{
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
static ngx_int_t ngx_http_mymodulecpp_handler(ngx_http_request_t *r);
static char * ngx_http_mymodulecpp(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
}
这部分是给nginx调用的,所以需要用C括起来。然后至于函数的实现就完全是可以c++了,我们自己的其他代码都完全是c++编写都行。
同样的在config中,源码文件也改为*.cpp等
同样的还是先执行auto/configure --add-module=src/mytest
然后修改objs/Makefile
1.文件前面新增编译器CXX=g++ , 编译参数 CXXFLAGS=-std=c++11 -g -Wall
2.将LINK改为 LINK=$(CXX),表示用g++进行链接。
3.文件后面找到ADDON,就是我们自己的模块编译的地方,将$(CC)改为我们的$(CXX) $(CFLAGS)改为``$(CXXFLAGS``)即可。这样我们的模块就使用g++,而且使用c++11的方式编译了,最后使用g++进行链接。

make进行编译,
make install 安装

最终运行nginx进行测试。
只能g++进行链接,因为我们的模块是g++编译的,其他是c编译的,c编译无法链接g++生成的.o(obj)文件,后面兼容前面嘛。

下面 再说下一劳永逸的c++编译方法:就是修改nginx的编译脚本

打开auto/make,在文件前面

1.添加c++编译器 CXX=g++

2.添加c++的编译参数 CXXFLAGS=-std=c++11 -g -Wall等

3.将里面的 LINK改为 LINK=g++ (LINK默认是gcc,这里改为c++的)

4.找到里面的第三方模块编译地方(可以搜索 the addons source),将ngx_cc后面的CC改为CXX,CFLAGS改为CXXFLAGS。

此方法在后续的过程中,可以全量编译,最终都是第三方模块按c++编译,最后使用c++链接。所有的第三方模块都是按c++编译了,如果其中的某些模块需要按c编译,那么在 the addons source 处的for循环中做.c和.cpp判断,或者文件名的判断特殊处理。

相关推荐
Yzzz-F6 分钟前
CF2023D
c++·算法·dp
lingran__13 分钟前
Linux 基础常用指令万字详解(下)|一切皆文件:重定向、管道、日志 与 Shell 原理
linux·运维·服务器·shell·管道·重定向·打包压缩
Mr.Lu ‍16 分钟前
C++开发,使用openCV API对图片进行压缩
开发语言·c++·opencv
大鹏的NLP博客16 分钟前
ONNX Runtime CUDA 推理优化实战:破解 C++ 比 Python 慢 28 倍的假象
c++·onnx·推理优化
祖力5519 分钟前
进程间通信(IPC机制):无名通道与有名通道
linux·运维·服务器·进程·通信·进程间通信·ipc
XR12345678821 分钟前
连锁多分支办公网络怎么选?统一运维与快速开局是关键
运维·网络·php
天远数科32 分钟前
零信任架构实战:基于天远风控经营异常预警构建自动化企业准入网关
运维·人工智能·架构·自动化
华科大胡子40 分钟前
Codex 实战:用 AI 写运维脚本
运维·人工智能
今天AI了吗41 分钟前
AI工作流的自动化趋势:从手动实验到自主Agent的研究范式转变
运维·数据库·人工智能·sql·机器学习·自动化·github
奶油喜多多1 小时前
教育小程序定制开发指南:从需求梳理到上线运维
运维·小程序