网站建设网页设计小江wordpress重写插件

news/2025/9/25 20:43:37/文章来源:
网站建设网页设计小江,wordpress重写插件,卖网站链接,自已建网站卖东西要多少钱上篇文章《C自动注册的工厂与--whole-archive》提到了--whole-archive选项在自动工厂示例的必要#xff0c;“貌似也没其他方法了”。 这篇文章介绍另一种可以替代的方式#xff0c;并分析其优缺点#xff0c;采用的代码示例同上篇文章。文章最后附代码。 方法介绍 ld链接器… 上篇文章《C自动注册的工厂与--whole-archive》提到了--whole-archive选项在自动工厂示例的必要“貌似也没其他方法了”。 这篇文章介绍另一种可以替代的方式并分析其优缺点采用的代码示例同上篇文章。文章最后附代码。 方法介绍 ld链接器提供了另外一组选项解决符号依赖的问题。 -u symbol --undefinedsymbol 上面的选项用来告诉链接器symbol符号在最终的输出文件里是未定义的需要从其他模块拉进去。 这样我们就可以指定依赖的符号让链接器强制将pay_handler.cpp生成的目标文件链接到可执行文件。 怎么找符号 由于C允许函数重载函数名不具有唯一性编译器需要对名字进行改编也就是name mangling。所以不能简单的将函数名写在链接选项后面需要指定实际改编后的符号。 pay_handler.cpp文件如下 #include msg_handler.h #include stdio.hclass PayHandler {public:PayHandler() { register_msg_handler(pay, PayHandler::handle);}static bool handle(std::string_view msg_data) {printf(pay handle\n);return true;} };static PayHandler pay_handler; 假设我们要找handle函数的符号整个流程如下(1)编译pay_handler.cpp为目标文件符号信息都存储在目标文件里 $ g -c pay_handler.cpp (2)使用nm获取所有符号结合grep命令搜索疑似符号 $ nm -g pay_handler.o | grep handleU _Z20register_msg_handlerPKcSt8functionIFbSt17basic_string_viewIcSt11char_traitsIcEEEE 0000000000000000 W _ZN10PayHandler6handleESt17basic_string_viewIcSt11char_traitsIcEE 0000000000000000 W _ZNSt17_Function_handlerIFbSt17basic_string_viewIcSt11char_traitsIcEEEPS4_E10_M_managerERSt9_Any_dataRKS7_St18_Manager_operation 0000000000000000 W _ZNSt17_Function_handlerIFbSt17basic_string_viewIcSt11char_traitsIcEEEPS4_E9_M_invokeERKSt9_Any_dataOS3_ (3)使用cfilt命令还原改编之前的符号确定最终的符号 $ cfilt _ZN10PayHandler6handleESt17basic_string_viewIcSt11char_traitsIcEE PayHandler::handle(std::basic_string_viewchar, std::char_traitschar ) 最终的CMakeList.txt如下 cmake_minimum_required (VERSION 3.24.0) project(main)add_library(payhandler STATIC pay_handler.cpp) add_library(msghandler STATIC msg_handler.cpp)add_executable(${PROJECT_NAME} main.cpp)target_link_libraries(${PROJECT_NAME}msghandlerpayhandler-u_ZN10PayHandler6handleESt17basic_string_viewIcSt11char_traitsIcEE ) 优劣分析 两个方面分析 跨编译器 cmake内置支持--whole-archive所以可以跨编译器而本篇介绍的选项需要指定符号而符号是跟具体编译器相关的所以不具备跨编译器的能力。 对文件大小的影响 --whole-archive会将静态库的所有目标文件链接进来最终的输出文件可能会比较大而本篇介绍的选项则只加载符号所依赖的目标文件。 所以要综合考虑以上两个方面选择适合的选项。 附代码 msg_handler.h #include functional #include string_viewusing MsgHandler std::functionbool(std::string_view msg_data);// 注册消息处理器 void register_msg_handler(const char *msg_type, MsgHandler handler);// 获取指定消息类型的处理器 MsgHandler* get_msg_handler(const char *msg_type); msg_handler.cpp #include map #include string#include msg_handler.hstatic std::mapstd::string, MsgHandler get_map() {static std::mapstd::string, MsgHandler map_handlers;return map_handlers; }void register_msg_handler(const char *msg_type, MsgHandler handler) {get_map()[msg_type] handler; }MsgHandler* get_msg_handler(const char *msg_type) {auto m get_map();auto it m.find(msg_type);if (it ! m.end()) {return it-second;}else {return nullptr;} } pay_handler.cpp #include msg_handler.h #include stdio.hclass PayHandler {public:PayHandler() { register_msg_handler(pay, PayHandler::handle);}static bool handle(std::string_view msg_data) {printf(pay handle\n);return true;} };static PayHandler pay_handler main.cpp #include msg_handler.h #include stdio.hint main() {MsgHandler* handle get_msg_handler(pay);if (handle) {(*handle)(test data);}else {printf(not found\n);}return 0; }

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

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

相关文章

net网站开发教学视频牌子网排行榜

报告来源:国泰君安(訾猛)亚马逊以技术为核心驱动力,实现从电商向科技公司的跨越,形成电商、物流、AWS、新零售协同发展的完整生态圈。亚马逊从1995年开始为用户提供线上商品,从一家网上书店发展成全品类电商…

选择网站做友情链接的标准一般是wordpress点击折叠展开内容

Java概况 JavaSE是java分类中的标准版,是刚接触java要学习的基础知识。 JavaEE是java分类中的企业版,是java中的高级,涉及到的知识广泛。 JavaME中M是Micro的缩写,用在嵌入式等电子设备中。 Java软件工程师:通过Ja…

通过【开题答辩过程】以《基于JavaEE的创意产品众筹平台的设计与实现》为例,不会开题答辩的能够进来看看

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Nano-Banana免费使用指南:一键生成专属3D手办,附超详细提示词 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

绘制金融集团监控大屏的地图demo

<!-- 引入ECharts和地图数据 --> <script src="https://cdn.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script> <script src="https://geo.datav.aliyun.com/areas_v3/…

如何在CentOS 7上安装bzip2-1.0.6-13.el7.x86_64.rpm RPM包(详细步骤)

如何在CentOS 7上安装bzip2-1.0.6-13.el7.x86_64.rpm RPM包(详细步骤)​bzip2​ 是一个在 Linux 系统中常用的文件压缩工具,这个 RPM 包是专门为 ​CentOS 7 / RHEL 7(64位系统)​​ 准备的安装版本 一、先确认你…

实用指南:《原神助手》开源神器:游戏体验大升级

实用指南:《原神助手》开源神器:游戏体验大升级pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

百度收录网站需要多久做海外推广的公司

一、Git概述&#xff08;1&#xff09;定义Git是目前世界上最先进的分布式版本控制系统。&#xff08;2&#xff09;能干什么&#xff1f;解决冲突、管理权限、代码备份、协同开发、版本还原、历史追查、版本记录、分支管理、代码审查&#xff08;3&#xff09;集中管理型版本管…

AM1.5G 太阳光谱 - 教程

AM1.5G 太阳光谱 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

2025年Java常见面试题

2025年Java常见面试题2025年Java常见面试题 原文链接:https://zhuanlan.zhihu.com/p/1913568498535360114 数据库事务特性。原子性、一致性、隔离性、持久性如何防止SQL注入:使用#不要使用$符号;对所有的入参做校验…

实用指南:k8s 跟 nacos 关于服务注册以及服务发现

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

9-25

今天满课。。。 最近在忙大创,电控这方面需要合作完成,重拾了单片机的知识 驱动电机使用的是TB6612,驱动130直流电机 使用pwm控制转速 PWM 是 脉冲宽度调制(Pulse Width Modulation)的缩写,是一种通过调节脉冲信…

电子商务网站推广的方法有哪些成都网站设计网站制作公司

关于三次样条插值&#xff0c;计算方法比较复杂&#xff0c;但是静下心来仔细研究也是可以理解的。 本文借鉴文章来源&#xff1a;http://www.cnki.com.cn/Article/CJFDTotal-BGZD200611035.htm 定义&#xff1a; 简单来说就是给定了一些在区间[a,b]的数据点{x1,x2,x3.....xn…

西安网站制作工商上海公司注册名字查询

自诞生以来&#xff0c;OpenStack 似乎一直被质疑&#xff0c;其背后最重要的两大推手 NASA 和 Rackspace 都弃它而去&#xff0c;惠普、思科接连宣布关闭基于 OpenStack 的公有云服务&#xff0c;但是,OpenStack 依旧坚挺。1Q&#xff1a;OpenStack发展历史A:2Q&#xff1a;op…

郑州行业网站建设最适合穷人的四种保险

1.数据类型和变量 Python使用缩进来组织代码块,一般使用4个空格的缩进.使用#来注释一行,其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块.Python对大小写敏感. 1.1 整数 Python可以处理任意大小的整数,包括负整数,写法与数学上写法一致,例如:-100.如果用十六…

AT_agc021_d [AGC021D] Reversed LCS

首先需要注意到一个性质,如果两个序列的最长公共子序列不是一个回文串,一定可以左右扩展成一个回文串,原因显然(但其实并不容易观察到这一性质)。 然后区间 DP 简单求一下区间更改之后的最长回文串即可。

常用注解汇总

常用注解汇总常用注解汇总 原文链接:https://www.cnblogs.com/tqlin/p/11687811.html 常用注解汇总 原文链接:https://www.cnblogs.com/tqlin/p/11687811.htmlSpring Boot 常用注解汇总 一、启动注解 @SpringBootApp…

adb shell 常用文件命令

自动生成 10 个 1m 文件 adb shell for i in $(seq 1 10); do dd if=/dev/zero of=/sdcard/file_$i.bin bs=1048576 count=1; done生成多个不同大小的文件(1MB 到 5MB) adb shell for i in $(seq 1 10); do dd if=/d…

你所不知道的Spring的@Autowired实现细节

你所不知道的Spring的@Autowired实现细节你所不知道的Spring的@Autowired实现细节 原文链接:https://cloud.tencent.com/developer/article/1692933 前言相信很多Java开发都遇到过一个面试题:Resource和Autowired的区…

Java文件编程

目录Java文件编程传统IONIONIO.2总结 Java文件编程 传统IO 传统IO (java.io包)的主要类:FileInputStream/FileOutputStream - 字节流 FileReader/FileWriter - 字符流 BufferedReader/BufferedWriter - 缓冲流 File -…