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

 

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

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

相关文章

VRRP----虚拟路由器冗余协议(技术专题)

目录 一、VRRP的基本原理 1.1 技术背景 1.2 VRRP带来了什么 1.2.1 VRRP的作用 1.2.2 VRRP工作的过程 1.2.3 VRRP报文: 1.3 VRRP术语 1.3.1 虚拟IP地址、MAC地址 1.3.2 Master、Backup路由器 二、VRRP的基础配置 实例一 需求 配置 一、VRRP的基本原理 1.1 技术背景…

docker 拉取镜像报错: error pulling image configuration:(kafka)

一、问题描述 docker 拉取镜像报错: error pulling image configuration:&#xff08;kafka&#xff09; ERROR: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/a6/a692873757c06a38279b61…

idea debug时提示”Method breakpoints may dramatically slow down debugging“的解决办法

问题现象 今天同事喊我过去看一个问题&#xff0c;项目正常启动的时候没问题&#xff0c;debug模式就卡住了&#xff0c;很久不动。我推测是哪个断点导致的&#xff0c;一看断点果然有情况。在方法上打了断点。 解决方式(Android Studio一样的解决&#xff09; 1、View Brea…

视频大模型 Vidu 支持音视频合成;字节跳动推出语音生成模型 Seed-TTS 丨 RTE 开发者日报 Vol.221

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

ABAP - SAP与企业微信集成

最近接到一个SAP直接给企业微信推送消息的需求&#xff0c;说实话之前一直没接触过&#xff0c;脑袋空空的&#xff0c;最终通过在百度搜索案例成功解决了&#xff0c;百度虽然一直被诟病&#xff0c;但却无法否认它的神奇。实现效果 实现思路&#xff1a;从需求出发&#xff0…

构建数字社会:Web3时代的社会治理与价值重构

随着数字化技术的飞速发展&#xff0c;我们正逐渐迈入Web3时代&#xff0c;这是一个以去中心化、开放性和透明性为特征的新时代。在这个时代&#xff0c;数字技术将不仅仅改变我们的生活方式和商业模式&#xff0c;还将对社会治理和价值观念产生深远影响。本文将探讨Web3时代下…

夏日骑行新宠降临!VELO Eden Angel坐垫 —— 让你的征途如诗般惬意!

夏日炎炎&#xff0c;是时候与维乐Eden Angel坐垫&#xff08;型号VL-6319&#xff09;共舞&#xff0c;开启一场关于自由与舒适的长途骑行盛宴&#xff01;这不仅是一款坐垫&#xff0c;它是你探索世界、追逐夏日风光的秘密武器。    聚丙烯底壳与钢弓的精妙组合&#xff…

Soildworks学习笔记(一)

1.如何添加M3,M4等螺丝孔&#xff1a; 有时候异形孔向导显示灰色是因为没有退出草图选项卡&#xff0c;选择异形孔向导就可以进行异形孔的设定和放置&#xff1a; solidwork放置螺丝孔以及显示螺纹的问题_.16-m3 solidwork-CSDN博客 2.如何修剪线条&#xff1a; 如何倒圆角或…

20240607给Toybrick的TB-RK3588开发板在Buildroot下适配瑞芯微7.86寸QXGATFT-LCD EDP屏幕1536x2048

20240607给Toybrick的TB-RK3588开发板在Buildroot下适配瑞芯微7.86寸QXGATFT-LCD EDP屏幕1536x2048 2024/6/7 13:59 1、背光部分&#xff1a;&backlight { pwms <&pwm2 0 25000 0>; status "okay"; }; &pwm2 { status "okay&…

海康威视综合安防管理平台 多处 FastJson反序列化RCE漏洞复现

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 由于…

每日一练 2024.6.7

给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操作中&#xff0c;你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作&#xff0c;删除所有 "AB" 和 "CD" 子串&#x…

如何备份和恢复华为手机?

智能手机已成为我们日常生活中不可或缺的一部分&#xff0c;它们存储着大量敏感数据。因此&#xff0c;确保数据安全&#xff0c;定期备份至关重要&#xff0c;以防手机意外丢失、损坏或被盗。 如果您拥有华为设备&#xff0c;并且正在寻找如何将华为手机备份到PC的方法&#…

爱校对繁体字校对上线——让企业文档更精准

在港澳台地区&#xff0c;企业每天都要处理大量繁体字文档&#xff0c;确保文档的准确性和专业性至关重要。爱校对全新推出的繁体字校对服务&#xff0c;专为企业设计&#xff0c;自动检测并修正拼写和语法错误&#xff0c;让您的文档管理更加轻松高效&#xff0c;提升企业形象…

【权威主办|投稿优惠】2024年应用物理、力学与数学国际会议(APMM 2024)

2024年应用物理、力学与数学国际会议&#xff08;APMM 2024&#xff09; 2024 International Conference on Applied Physics, Mechanics, and Mathematics 【重要信息】 大会地点&#xff1a;南昌 大会官网&#xff1a;http://www.iacapmm.com 投稿邮箱&#xff1a;iacapmmsu…

香港优才diy推荐信很难写?看看140分获批的人怎么写!(附上模板)

大家好&#xff0c;我是已获批香港优才的糖爸。 香港优才diy推荐信作为申请材料中的重要一环&#xff0c;对于申请人过往工作的综合软实力和入境处的审核具有重要影响。如何撰写一份优秀的雇主推荐信呢&#xff1f;就我的获批经验来谈谈。 一、明确推荐信的目的 雇主推荐信的主…

外贸干货|如何提高商机转化率?

常常听到外贸业务员抱怨“询盘质量不高”、“有询盘没转化”、“有些客户只是来比价格的”……想必大家都不陌生&#xff01; 但难道只有询盘问题、客户问题吗&#xff1f;我们自身的处理真的没问题吗&#xff1f;我想只有更多的自省自查我们可以控制的问题&#xff0c;优化我们…

大模型在信用卡行业的应用探索

2022年11月&#xff0c;OpenAI发布ChatGPT3.5&#xff0c;迅速引起各界广泛关注&#xff0c;引发了人工智能领域新一轮发展热潮。ChatGPT作为一款基于人工智能技术的大语言模型&#xff08;LLMs&#xff09;&#xff0c;在文本生成、对话理解、多领域知识覆盖等方面具有卓越表现…

替代LT3741大功率20A恒压恒流驱动器

1. 产品特性(替代LT3741) ➢ CTRL 引脚对输出电流提供精确控制 ➢ 2%的电压调节精度 ➢ 6%的电流调节精度 ➢ 输入电压范围&#xff08;外接达林顿 NPN 管&#xff09;&#xff1a; 6V~40V ➢ 输入电压范围&#xff08;外接单颗 NPN 管&#xff09;&#xff1a; 5.25V~40V…

markdown图片离线备份,批量替换url

之前在某站写了很多笔记&#xff0c;最近想着迁移备份下&#xff0c;找到了接口写了个脚本将文章爬取下来了。文章是基于 Markdown 格式的&#xff0c;在写作时粘贴图片&#xff0c;直接上传到他们图床服务器了。Markdown 文本里面是个<img src"https://aaa.com/bbb.jp…

神经网络 torch.nn---Containers

torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) nn是Neural Network的简称&#xff0c;帮助程序员方便执行如下的与神经网络相关的行为&#xff1a; &#xff08;1&#xff09;创建神经网络 &#xff08;2&#xff09;训练…