当前位置: 首页 > news >正文

学院评估 网站建设整改wordpress 多条件搜索

学院评估 网站建设整改,wordpress 多条件搜索,软件工程软件项目管理,常州seo关键词排名出现这种差异的原因在于:动态库中的符号分为两种类型: 常规符号表(regular symbol table):通常用于静态链接和调试,默认不包含在动态库中(除非显式保留)。动态符号表(dyn…

出现这种差异的原因在于:动态库中的符号分为两种类型

  • 常规符号表(regular symbol table):通常用于静态链接和调试,默认不包含在动态库中(除非显式保留)。
  • 动态符号表(dynamic symbol table):专门用于动态链接,始终存在于动态库中,供运行时解析符号。

具体解释:

  1. nm默认查看的是常规符号表
    如果动态库在编译时通过-fvisibility=hiddenstrip命令移除了常规符号表(为减小体积或保护代码),nm会显示"no symbols"。

  2. nm -D强制查看动态符号表(.dynsym段)
    动态链接器(如ld.so仅依赖动态符号表解析符号,因此即使常规符号表被剥离,动态符号表仍必须保留(除非库被完全strip -R .dynsym,但这会导致库无法使用)。

如何验证?

  • 检查动态符号表是否存在:
    readelf -S libxxx.so | grep dynsym
    若存在.dynsym段,则nm -D必然有输出。

  • 检查是否被剥离:
    file libxxx.so
    输出若包含stripped,说明常规符号表已被移除,但动态符号表可能仍存在。

总结:

  • nm看不到符号 → 常规符号表被剥离(不影响动态链接)。
  • nm -D能看到符号 → 动态符号表正常(足够动态链接使用)。

这是动态库优化后的正常现象,无需担心功能问题。

二、常规符号表的作用

常规符号表(regular symbol table,通常是.symtab.strtab段)只在静态链接和调试阶段有用,对动态库的正常运行完全没有作用。具体用途如下:


1. 调试(Debug)

  • 作用:为调试器(如gdb)提供符号信息(函数名、变量名、行号等)。
  • 例子
    如果动态库保留了常规符号表,调试时可以准确看到崩溃栈中的函数名:
    #0  0x00007ffff7a8b2c4 in my_function() from libxxx.so
    
    如果符号表被剥离,只能看到地址:
    #0  0x00007ffff7a8b2c4 in ?? from libxxx.so
    

2. 静态链接(Static Linking)

  • 作用:如果某个**静态库(.a文件)**需要链接这个动态库中的符号,常规符号表是必需的。
  • 例子
    假设libxxx.so中有函数foo(),如果另一个静态库libbar.a需要在编译时链接foo(),则需要libxxx.so的常规符号表来解析foo()的地址。
    (但这种情况极少见,因为动态库通常不会用于静态链接。)

3. 分析工具(如nmobjdump

  • 作用:帮助开发者检查库的内部符号(如是否有未导出的全局符号)。
  • 例子
    nm libxxx.so可以查看所有符号(包括未导出的),而nm -D libxxx.so只能看到动态符号表(导出的符号)。

4. 性能分析(Profiling)

  • 作用perf等性能分析工具依赖符号表将地址转换为函数名。
  • 例子
    如果符号表被剥离,perf report只能显示十六进制地址,无法直观看到热点函数。

常规符号表 vs 动态符号表

特性常规符号表(.symtab动态符号表(.dynsym
作用调试、静态链接动态链接
是否必须存在否(可剥离)是(必须存在)
工具查看nmobjdump -tnm -Dreadelf -sD
大小较大(含所有符号)较小(仅导出符号)

结论:

  • 对最终用户:常规符号表完全无用,可以安全strip(如strip libxxx.so)。
  • 对开发者:建议保留调试版(带符号表)用于调试,发布版剥离符号表以减小体积。
http://www.dtcms.com/a/617824.html

相关文章:

  • 通信系统架构设计
  • C++_Bug:现代写法拷贝构造中 swap 写法之小坑
  • 通关upload-labs(14-21)加分析源码
  • 【目标检测】YOLOv10n-ADown弹孔检测与识别系统
  • 扬中网站推广导流网盘怎么做电影网站
  • 【C++】:priority_queue的理解,使用和模拟实现
  • 深圳南山网站建设公司做网络推广需要多少钱
  • Rust中的集合Collection
  • Git 配置实践
  • 学习笔记十:多分类学习
  • 【实战案例】基于dino-4scale_r50_8xb2-36e_coco的棉田叶片病害识别与分类项目详解
  • opencv学习笔记9:基于CNN的mnist分类任务
  • 分布式系统中MPSC队列的内存回收策略适配避坑
  • Git笔记---分支相关操作
  • 基于YOLOv8的汽车目标检测系统实现与优化_含多种车型识别与自动驾驶应用场景
  • 广东省建设工程协会网站如何查看一个网站是不是用h5做的
  • 开发STM32日记1:安装软件、配置软件(芯片为STM32F103C8T6 )
  • 【Git】处理报错原因
  • 基于Bboss框架的ElasticSearch并发更新版本冲突问题解决
  • Highcharts常见问题解析(5):如何将多个图表导出到同一张图片或 PDF?
  • 什么是中间件?必须要有中间件吗?有哪些国产中间件厂商?
  • 第七章深度解析:从零构建智能体框架——模块化设计与全流程落地指南
  • 机器视觉3D无序抓取如何确保抓取精度,需要从以下五个核心方面入手,形成一个闭环的控制系统
  • Git Bisect - Git Commit 故障排查利器使用详解
  • 青岛科技街网站建设不懂外贸做外贸网站好做吗
  • 2511C++,CTAD简化回调
  • 【ros2】ROS2 C++参数设置指南(含跨节点修改方法)
  • STM32通信接口----USART
  • 解决Web游戏Canvas内容在服务器部署时的显示问题
  • 我爱学算法之—— 哈希