首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >强制% ld在% ld时间解析弱引用

强制% ld在% ld时间解析弱引用
EN

Stack Overflow用户
提问于 2014-09-05 13:18:28
回答 1查看 315关注 0票数 1

考虑一个类似这样的程序:

代码语言:javascript
运行
复制
#include <stdio.h>
void foo() __attribute__((__weak__));
int main()
{
    printf("%p\n", (void *)foo);
    if (foo) foo();
}

如果编译为常规的、非PIE动态链接的可执行文件,则在ld时会解决foo不存在的问题,即使使用LD_PRELOAD来定义foo,也看不到它。另一方面,如果程序被编译为foo,则弱动态符号引用最终会出现在输出中,并且LD_PRELOAD可以使符号PIE可见。

有没有办法强制PIE可执行文件的非PIE行为(在ld时解决弱引用符号的不存在问题,而不是在运行时)?

EN

回答 1

Stack Overflow用户

发布于 2014-10-17 14:39:53

具有此属性的函数将其名称作为弱符号而不是全局名称发出。这主要用于命名可由用户代码覆盖的库例程。

具有两个或多个具有相同名称的全局符号的弱符号不会导致冲突,只要它们中除一个之外的所有符号都被声明为弱符号。链接器忽略弱符号的定义,并使用普通全局符号定义来解析所有引用,但如果普通全局符号不可用,则将使用弱符号。弱符号可用于命名可由用户代码重写的函数和数据。弱符号也称为弱别名,或简称为弱符号。

来自互联网!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25679030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档