带版本号的符号 versioned symbol

can't be versioned to common symbol 'loc1' aarch64编译 glibc-2.23  binunit-2.30https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=388b4f1a02f3a801965028bbfcd48d905638b797diff --git a/misc/regexp.c b/misc/regexp.cindex 19d76c0..eaea... 阅读详情

转载自:http://blog.chinaunix.net/space.php?uid=222028&do=blog&id=2658492

 

 

小小疏忽,折腾了我近一天的时间,不过总算弄清了个大概。
碰到几次带版本的符号的连接问题,令人头疼。
终于狠下心来,花了两天时间把info ld Scripts看了一遍,感觉大有长进。
突然有股冲动,想译完ld script部分。

                              带版本号的符号
                           E-mail: zhanglei@sict.ac.cn


*难免有错误,欢迎指导*

内容简介
---------
0 前提
1 带版本号的符号的定义
2 连接到带版本的符号
3 GNU扩充
4 我的疑问
5 英文搜索关键字
6 我的参考

                              带版本号的符号
                           E-mail: zhanglei@sict.ac.cn


*难免有错误,欢迎指导*

内容简介
---------
0 前提
1 带版本号的符号的定义
2 连接到带版本的符号
3 GNU扩充
4 我的疑问
5 英文搜索关键字
6 我的参考


0. 前提

-- 只限于ELF文件格式
-- 以下讨论用gcc

1. 带版本号的符号的定义(共享库内)

文件b.c内容如下,
int old_true()
{
        return 1;
}

int new_true()
{
        return 2;
}

写连接器的版本控制脚本,本例中为b.lds,内容如下
VER1.0{
    new_true;
};
VER2.0{
};

$gcc -c b.c
$gcc -shared -Wl,--version-script=b.lds -o libb.so b.o

可以在{}内填入要绑定的符号,本例中new_true符号就与VER1.0绑定了。
那么如果有一个应用程序连接到该库的new_true符号,那么它连接的就是VER1.0版本的new_true符号

如果把b.lds更改为,
VER1.0{
};
VER2.0{
    new_true;
};

然后在生成libb.so文件,在运行那个连接到VER1.0版本的new_true符号的应用程序,可以发现该应用程序不能运行了,
因为库内没有VER1.0版本的new_true,只有VER2.0版本的new_true。


2. 连接到带版本的符号
写一个简单的应用(名为app)连接到libb.so,应用符号new_true
假设libb.so的版本控制文件为,
VER1.0{
};
VER2.0{
    new_true;
};

$ nm app | grep new_true
         U new_true@@VER1.0
$
用nm命令发现app连接到VER1.0版本的new_true

3. GNU的扩充
它允许在程序文件内绑定 *符号* 到 *带版本号的别名符号*

文件b.c内容如下,
int old_true()
{
        return 1;
}

int new_true()
{
        return 2;
}
__asm__( ".symver old_true,true@VER1.0" );
__asm__( ".symver new_true,true@@VER2.0" );


其中,带版本号的别名符号是true,其默认的版本号为VER2.0

供连接器用的版本控制脚本b.lds内容如下,
VER1.0{
};
VER2.0{
};

版本控制文件内必须包含版本VER1.0和版本VER2.0的定义,因为在b.c文件内有对他们的引用

****** 假定libb.so与app.c在同一目录下 ********

以下应用程序app.c连接到该库,
int true();
int main()
{
    printf( "%d ", true );
}

$ gcc app.c libb.so
$ LD_LIBRARY_PATH=. ./app
2
$ nm app | grep true
         U true@@VER2.0
$

很明显,程序app使用的是VER2.0版本的别名符号true,如果在b.c内没有指明别名符号true的默认版本,
那么gcc app.c libb.so将出现连接错误,提示true没有定义。

也可以在程序内指定特定版本的别名符号true,程序如下,
__asm__( ".symver true,true@VER1.0" );
int true();
int main()
{
    printf( "%d ", true );
}

$ gcc app.c libb.so
$ LD_LIBRARY_PATH=. ./app
1
$ nm app | grep true
         U true@VER1.0
$

显然,连接到了版本号为VER1.0的别名符号true。其中只有一个@表示,该版本不是默认的版本




我的疑问:
    版本控制脚本文件中,各版本号节点之间的依赖关系


英文搜索关键字:
    .symver
    versioned symbol
    version a shared library

参考:
    info ld, Scripts node

QSPI Flash的原理与QSPI时序的Verilog实现 本节主要是讨论QSPI(Quad SPI,四线SPI总线)的相关内容。我的开发板上有一片型号是W25Q128BV的Quad SPI Flash存储器,本文将以它为例子来说明QSPI操作的一些内容。 阅读详情

相关推荐

Windows Server 2012评估版过期自动关机问题:两种高效解决方案详解

本文针对Windows Server 2012评估版过期导致的自动关机问题,提供了两种高效解决方案。一是通过slmgr.vbs命令重置授权,临时延长评估期;二是使用DISM工具将评估版转换为正式版,一劳永逸。文章详细解析了两种方法的操作步骤、注意事项及适用场景,帮助用户快速恢复服务器稳定运行。

pytorchlight8的博客 1195

Linux:追踪 pthread_create 函数源代码_glibc-2.35_linux-5.15

对pthread_create函数源代码从用户态到内核态的追踪过程

BuildUp 2206

我的AI学习 ai维护工具之langfuse

as_type: Optional[Literal[‘generation’]] = None, # 将记录定义为 Observation (LLM 调用)transform_to_string: Optional[Callable[[Iterable], str]] = None # 将输出转为 string。要用LangFuse的云服务,首先要在LangFuse官网上注册,注册完后将页面拉倒最后,点免费的SignUp,API文档:https://api.reference.langfuse.com/

liubaobin的博客 4095

绕过libsafe的保护--覆盖_dl_lookup_versioned_symbol技术

转载自:http://zjss.shayit.com/?news&t=7925&forum=24   在这里向您展现一下新的覆盖_dl_lookup_versioned_symbol技术 (这技术我提的,就这么命名好了:) ) 错误之处,还请来信斧正,谢谢。 上接> 由于libsafe只保护堆栈区,不保护heap,和bss区,所以,我们可以设法覆盖那里的某些重要变量,从而使我

工作记录--创造或收集原创 2181

PV-RCNN实战:如何在KITTI数据集上实现3D目标检测(附完整代码解析)

本文提供了在KITTI数据集上实战PV-RCNN 3D目标检测的完整指南,涵盖环境配置、数据预处理、模型训练与评估全流程。通过详细的代码解析和调参技巧,帮助读者掌握这一融合点与体素优势的经典3D目标检测模型,并实现从理论到实践的跨越。

weixin_29098391的博客 403

漏洞挖掘之工具配置

本文主要讲解burp工具的插件安装。

qq_64775230的博客 3275

Idea编译版本错误解决

不甘平庸的人 2813

推荐系统[八]算法实践总结V3:重排在快手短视频推荐系统中的应用and手淘信息流多兴趣多目标重排技术

快手推荐系统包括了传统的召回、粗排、精排、Learning To Rank 的多目标排序、多目标预估等技术环节。而在这些模块之后的技术环节就属于重排序,主要包括手机端和服务端两部分。服务端通过传统服务器部署重排服务,包括序列重排、多源内容混排、多样性模块。端上部分包括端上重排模型和端上重排策略两部分。重排技术是快手十分重要的技术环节,它的发展速度远快于其他排序环节,属于较新的技术范畴。整个序列的价值并非单 item 效果的累计,如何使得序列价值最大化;

丨汀、的博客 1063

ELF动态解析符号过程(修订版)

 ELF动态解析符号过程(修订版)by alert7 2002-01-27转载自:http://elfhack.whitecell.org★★ 前言本篇文章以linux为平台为例,演示ELF动态解析符号的过程。不正之处,还请斧正。通常,ELF解析符号方式称为lazy MODE装载的。这种装载技术是ELF平台上默认的方式。在不同的体系平台在实现这种机制也是不同的。但是i386和SPA

新博客请访问- http://oliveryang.net 1万+

ABAP链接外围数据库SQL实战案例

这是一个ABAP 直接读取SQL数据库数据的实例,以此种方式可以将SAP与外围的系统做一些集成,比如生产,SAP本身生产这部分是弱项,管不了那么细,很多车间的数据都是在MES系统,如管理上需要则可以将MES的一些数据自动读取过来,结合SAP本身的业务数据,做一些分析是比较方便的。 1、首先在SAP里建立数据库链接:DBCO ,直接增加一条记录,填上数据库的相关信息:IP地址、数据库名、账号SA、密码这些。 2、开发程序,设置成自动运行的计划,固定时间自动读取SQL里的数据,保存到SAP自定义表.

heng0757的专栏 1511

在最新版eclipse中配置使用AI AIcoder _AIcoder配置GPUSTACK使用_配置OLLAMA本地AI模型利用_集合---AI场景应用工作笔记

本文介绍了三款实用的编程辅助工具:一款便捷的反编译插件,可直接在插件市场安装使用;GitHub Copilot提供每月2000次代码补全和50条聊天记录的免费额度,支持智能代码提示功能;aicoder支持配置本地模型运行。这些工具都能有效提升开发效率,其中GitHub Copilot的智能补全功能尤为突出。

添柴程序猿的专栏 1245

谈EXPORT_SYMBOL使用

EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。 1、EXPORT_SYMBOL的作用是什么?EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,

Macross的专栏 5万+

SSD |(二)SSD主控

控制器作为一个片上系统,处理来自用户端的命令并负责管理闪存颗粒。

知识库搭建ing 1960

Trendyol-TTS伦理使用边界:语音克隆风险、滥用防护与负责任的5条部署建议

Trendyol-TTS 是一个基于 openbmb/VoxCPM2 微调的土耳其语文本转语音(TTS)模型,使用 20 小时私有语音数据通过 LoRA 训练而成,生成的语音带有鲜明的真实人声音色。能力越强,伦理边界就越重要:它能让无障碍阅读和土耳其语内容创作更便捷,也可能被用于冒充身份、伪造语音证据。本文梳理 Trendyol-TTS 的语音克隆风险、滥用防护要点,并给出 5 条可直接落地的负责

gitblog_01058的博客 798

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

no symbol version section for versioned symbol `memcpy@GLIBC_2.4'

错误: [cc] Starting link [cc] /usr/bin/ld: libBindingtest1p1.so: no symbol version section for versioned symbol `memcpy@GLIBC_2.4' [cc] /usr/bin/ld: 最后的链结失败: nonrepresentable sect...

柳鲲鹏 1164

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

全网首发:终极解决办法:/usr/bin/ld: libcc.so: no symbol version section for versioned symbol `memcpy@GLIBC_2.0‘

  具体错误: [cc] In file included from /home/tsit/jogamp232-loongarch64/gluegen/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c:5: [cc] /usr/include/stdlib.h:563:25: note: expected ‘void *’ but argument is of type ‘const char *’

柳鲲鹏 1651

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

程序员的自我修养:链接、装载与库(库)

使用符号版本脚本定义符号集合(如SUNW_1.1SUNW_1.2),集合之间可继承。范围机制:通过local: *;将未明确导出的符号隐藏为局部符号。链接器在程序中记录程序实际依赖的最小符号版本集合,运行时动态链接器检查系统库是否满足。这里可能会引起歧义,额外解释下,在符号版本机制中,链接器在程序中记录的不是最大或最小的版本号,而是记录了一个版本要求的下界。也就是说,链接器在程序中记录的是程序所依赖的符号版本中的最高版本号,因为只有这个版本号才能保证所有需要的符号都存在于共享库中。

weixin_44446626的博客 364

Qt5.14.2 aarch64静态编译实战:ABI对齐与符号可见性攻坚

静态链接是嵌入式Linux应用实现零依赖、单文件部署的核心技术路径,其本质是将C/C++运行时、系统库及第三方模块全部归档进可执行体。在aarch64架构下,该过程高度依赖工具链与目标系统的ABI严格对齐——包括内核syscall编号、glibc符号版本(如GLIBC_2.2.5)、浮点调用约定(hard/softfp)等底层契约。Qt作为重度依赖harfbuzz、freetype、ICU等第三方库的大型框架,其静态编译失败往往并非配置疏漏,而是ABI错配引发的链接期符号未定义(如hb_buffer_set

weixin_33802505的博客 221

Humanizer 时间单位体系(TimeUnit)详解:枚举定义、符号映射与本地化机制

`TimeUnit` 是 Humanizer 中用于描述相对时间与时间跨度(TimeSpan)格式化所支持时间单位的核心枚举,涵盖毫秒到年共 8 个单位,并直接驱动 `DateHumanize`、`TimeSpan.Humanize`、`ToSymbol` 等 API 的本地化输出。本文基于 Humanizer 2.11.10 文档与源码,完整讲解该枚举的取值、符号映射、本地化数据来源及其在时间/

gitblog_01162的博客 207

MikroORM 复合主键(Composite Primary Keys)实战指南:原始类型复合键、外键派生身份与带元数据联结表

复合主键是关系型数据库中一个非常强大的建模概念:当单列主键无法唯一标识一条记录时,可以组合多列(甚至多个外键)共同构成主键。MikroORM 从 **3.5 版本**起原生支持复合主键,并且覆盖面相当广——既支持由 `string`、`number` 等**原始数据类型**组成的复合键,也支持**外键(关联实体)直接作为主键**的用法,还可以让携带复合主键的实体出现在各种关联关系中。 本文以 [

gitblog_00990的博客 331

移植alsa-lib遇到的问题

移植alsa-lib遇到的问题 linux audio    alsa lib    VERSIONED_SYMBOLS 这两天移植alsa lib时遇到了一个问题,被困住了好久。 做个记录,以后再被相同问题困住。 问题背景是这种。有个项目,客户要求使用新的alsa-lib库。 到alsa官网上看了下。最新的是1.0.28。 既然能够要用新的。咱们就彻底满足客户,用个最新的。 ...

weixin_34122810的博客 452

MikroORM 复合主键完整指南:从原生类型主键到外键派生标识与带元数据的联结表

MikroORM 自 3.5 版本起原生支持复合主键(Composite Primary Keys),覆盖「多个原生类型字段组合主键」「通过外键实体派生身份(Derived Identity)」「带附加元数据的联结表实体」等关系型数据库中的典型建模场景。本文以版本 7.2 文档为基础,结合仓库源码与测试用例,系统讲解复合主键的语义、四种实体定义方式、查询/持久化/关联用法以及 QueryBuild

gitblog_00976的博客 1031

GitNexus gitnexus-plan 实施上下文包(Implementation Context Pack):规划到执行的机器可读交接契约

本文围绕 gitnexus-plan 技能体系中的核心交付物——**Implementation Context Pack(实施上下文包,计划文档第 11 节)**展开。它是一份稳定、可机器读取的结构化契约,由规划 Agent(gitnexus-plan)从调研过程中蒸馏产出,后续的落地执行 Agent(gitnexus-work,或任何执行方)**无需重新调查**即可依据它开始编码。读完本文,你

gitblog_00655的博客 673

Hanami 框架演进全解析:从 Lotus 时代到 3.0 的架构变迁、核心特性与配置实战深度解读

> **导读**:本文以 Hanami 官方仓库的 [CHANGELOG.md](https://link.gitcode.com/i/a5a9a9e869e7004693ce829d6c301a69) 为绝对主线,系统梳理该项目自 2014 年 Lotus 前身(v0.1.0)到当前 3.0.2(含 Unreleased 前瞻)十余年的完整演进脉络,并对照仓库内源码与测试逐一印证关键特性:包括

gitblog_00092的博客 730

Kiln 接入 Cloudflare Workers AI:LiteLLM `cloudflare/` 供应商选型分析与 OpenAI 兼容路由实战

Cloudflare Workers AI 是 Kiln 计划接入的模型推理供应商之一。本文以 Kiln 仓库内研究文档 [litellm-support.md](https://link.gitcode.com/i/3b849d7905bd325a51d4b454f767e4ac) 为核心,完整梳理了 LiteLLM 内置 `cloudflare/` 供应商"新老两代实现"的本质差异与缺陷,并结

gitblog_00354的博客 250

scientific-agent-skills 中的 GTEx Portal API v2 检索指南:组织特异基因表达与 eQTL 查询实战

GTEx(Genotype-Tissue Expression)记录了来自死后捐献者的跨人体组织基因表达谱,是研究组织特异基因调控与 eQTL(表达数量性状位点)的首选公开数据源。本文基于本仓库 [database-lookup](https://link.gitcode.com/i/252db5fe26998e49dafb0cc4ef279c95) Skill 的 [gtex.md](https

gitblog_00466的博客 588
上一篇: ip包中的协议类别字段值
下一篇: GNU ld链接脚本学习
RunBoying
博客等级 码龄17年 41粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值