nginx c++模块编译

news2025/1/19 17:11:50

不论是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判断,或者文件名的判断特殊处理。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1801825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

呆滞物料规范管理了,问题就好办了

对于制造企业来说&#xff0c;库存是生存和发展的重要保障&#xff0c;过高的库存会占用企业大量的资金和管理成本&#xff0c;影响企业的正常生产&#xff0c;然而多数中小制造企业还在用人工干预管理&#xff0c;如何控制呆滞物料成为仓储管理的一大难题。 什么是呆滞料&…

【JAVASE】日期与时间类(下)

三&#xff1a;LocalDateTime 相当于LocalDate类&#xff0c;在LocalDateTime类的对象中还可以封装时、分、秒和纳秒&#xff08;1纳秒是1秒的十亿分之一&#xff09;等时间类型。 例如&#xff0c;创建LocalDateTime对象 &#xff0c; LocalDateTime date LocalDateTi…

【Docker】上海交通大学开源镜像站服务变更:Docker 用户需迅速行动

近日&#xff0c;上海交通大学开源镜像站宣布了一个重大变更&#xff0c;对国内Docker用户来说&#xff0c;这一消息无疑具有紧迫性。 镜像站服务的变更 上海交通大学开源镜像站一直是国内Docker用户的重要资源&#xff0c;它提供了快速下载DockerHub仓库镜像的服务。然而&a…

LiDAR360MLS 7.2.0 雷达点云数据处理软件功能介绍

新增模块和功能: 支持手持、背包数据的解算 SLAM解算成功率提升 SLAM解算效率提升 采集端与后处理端保持一致 赋色优化 新增平面图模块 新增平面图全自动矢量化功能 新增平面图矢量一键导出DXF功能 新增平面图正射影像一键导出功能 支持交叉、垂直绘制 支…

如何安装 CleanMyMac X 4.15.3破解版

CleanMyMac X 4.15.3破解版是一款专业的Mac系统清理软件&#xff0c;可一键智能扫描清理mac系统日志缓存磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用。同时CleanMyMac X 破解版可以强力卸载恶意软件&#xff0c;修复系统漏洞&…

数据挖掘--聚类分析:基本概念和方法

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性&#xff1a;基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析&#xff1a;基本概念和方法 聚类分析 聚类分析是把一个数据对象&…

Java基础——数组Array

系列文章目录 文章目录 系列文章目录前言一、数组基本概念二、一维数组三、数组的模型四、数组对象的创建五、元素为引用数据类型的数组 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网…

基于协同注意力的视觉-语言嵌入用于机器人手术视觉问题定位回答

文章目录 CAT-ViL: Co-attention Gated Vision-Language Embedding for Visual Question Localized-Answering in Robotic Surgery摘要方法实验结果 CAT-ViL: Co-attention Gated Vision-Language Embedding for Visual Question Localized-Answering in Robotic Surgery 摘要…

如何搭建跨境电商独立站||搭建跨境电商独立站必须具备的功能板块设计

在搭建跨境电商独立站时&#xff0c;需要确保网站具备一系列关键的功能板块&#xff0c;以提供用户友好的购物体验并确保业务的顺利进行。以下是这些功能板块的详细归纳&#xff1a; 注册登录与身份验证&#xff1a; 用户注册与登录&#xff1a;允许用户创建账户&#xff0c;通…

探索C++ STL中的std::list:链式存储的艺术与实践

目录 ​编辑 引言 一、std::list详解 二、std::list的关键成员函数 三、示例代码 四、std::list与std::vector的对比 内存布局&#xff1a; 插入与删除&#xff1a; 迭代器稳定性&#xff1a; 五、应用场景 结语 引言 在C标准模板库(STL)中&#xff0c;std::list作…

redis学习路线

待更新… 一、nosql讲解 1. 为什么要用nosql&#xff1f; 用户的个人信息&#xff0c;社交网络&#xff0c;地理位置&#xff0c;自己产生的数据&#xff0c;日志等等爆发式增长&#xff01;传统的关系型数据库已无法满足这些数据处理的要求&#xff0c;这时我们就需要使用N…

python-自幂数判断

[题目描述]&#xff1a; 自幂数是指&#xff0c;一个N 位数&#xff0c;满足各位数字N 次方之和是本身。例如&#xff0c;153153 是 33 位数&#xff0c;其每位数的 33 次方之和&#xff0c;135333153135333153&#xff0c;因此 153153 是自幂数&#xff1b;16341634 是 44 位数…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)

概览 在任何语言中对序列(或集合)元素的排序无疑是一种司空见惯的常规操作,在 Swift 语言里自然也不例外。序列排序看似简单,实则“暗藏玄机”。 要想真正掌握 Swift 语言中对排序的“各种姿势”,我们还得从长计议。不如就先从最简单的排序基本功开始聊起吧。 在本篇博…

OpenCv之简单的人脸识别项目(动态处理页面)

人脸识别 准备九、动态处理页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件 3.定义视频处理脚本4.定义相机抓取脚本5.定义关闭窗口的函数6.按钮设计6.1视频处理按钮6.2相机抓取按钮6.3返回按钮 7.定义关键函数8.动态处理…

Halcon 双相机标定与拼图(二)

一、概述 这种标定有两种模式&#xff0c;有一个标定板和多个标定板两种 一个标定板 两个相机的重叠区域比较大&#xff0c;那么我们可以把标定板放到那个重叠区域来统一坐标系&#xff0c;如下 这种是只需要一个标定板&#xff0c;这种是推荐的方式 。这种是比较简单的&…

Unity DOTS技术(十四) Job与ParallelJob接口

文章目录 一.创建方式如下图:二.开启Burst编译器三.创建多个Job四.数学运算介绍五.ParallelJob接口1.传统方式创建2.使用Parallel来实现对比3开启Burst编译器对比 这里介绍直接使用Job新的开启线程工作的方式. 一.创建方式如下图: 这里就开启了一个线程 二.开启Burst编译器 …

【机器学习】Softmax回归探索

从零开始探索Softmax回归&#xff1a;深度学习的入门之旅 一、Softmax回归的原理与关键步骤二、研究准备&#xff1a;GPU环境下的PyTorch安装与配置三、研究内容&#xff1a;使用PyTorch实现Softmax回归 随着人工智能和机器学习的迅猛发展&#xff0c;深度学习技术逐渐成为了科…

深度网络学习笔记(二)——Transformer架构详解(包括多头自注意力机制)

Transformer架构详解 前言Transformer的整体架构多头注意力机制&#xff08;Multi-Head Attention&#xff09;具体步骤1. 步骤12. 步骤23. 步骤34. 步骤4 Self-Attention应用与比较Self-Attention用于图像处理Self-Attention vs. CNNSelf-Attention vs. RNN Transformer架构详…

搭建数字化营销平台带来的一系列积极影响!

在当今数字化时代&#xff0c;搭建数字化营销平台具有一系列令人瞩目的积极影响。 这种平台的搭建&#xff0c;能够有力地促进形成良好的产业生态。就如同搭建蚓链数字化生态营销系统这般&#xff0c;它强化了产业间的沟通与协作&#xff0c;使得各个环节紧密相连&#xff…

【MMU】——MMU 权限控制

文章目录 权限控制内存访问权限内存类型XN execute neverDomain 权限控制 内存访问权限 内存类型 TEX C B bit 控制信息 XN execute never 不可执行区域&#xff0c;例如设备地址空间通常标记为不可执行区域&#xff0c;如果有指令预取访问了该空间&#xff0c;就会触发指令…