使函数默认为在gcc / ld中对外部定义的符号进行别名

问题描述 投票:0回答:2

我有一个仅标头的库,当前正在调用mallocfree

此标头包含在许多不同的静态库中,这些静态库用于构建配置不同的程序。

我希望能够在链接时将这些调用替换为对另一个分配器的调用-基于链接步骤中是否包含该分配器库,而不会影响对mallocfree的其他调用。 >

[我的想法是让库调用customizable_malloccustomizable_free,并且将这些符号默认情况下解析为mallocfree -然后分配器库可以为customizable_malloc和[ C0]

但是,我搞砸了weak / alias / weakref属性,我似乎什么也没用。有办法吗?

注:

我知道我可以创建一个间接层:customizable_free可能是调用malloc的函数的弱别名。但这增加了似乎不必要的间接级别。

理想情况下,这是链接器在遇到对customizable_malloc的调用时要采取的步骤:

  1. 检查是否存在customizable_malloc的定义
  2. 如果有,请致电
  3. 如果没有,则表现得就像对常规malloc的调用。
  4. 澄清说明:

在单目标方案中,可以使用customizable_malloc完成。该库可以创建默认为#definecustomizable_malloc的宏customizable_freemalloc。但是,在这种情况下这是行不通的,因为在不知道是否存在覆盖的情况下将事物内置到静态库中。

我有一个仅标头的库,当前正在调用malloc和free。此标头包含在许多不同的静态库中,这些静态库用于构建配置不同的程序。我会...

c gcc ld elf
2个回答
1
投票

额外的间接级别是唯一的方法。 ELF(和其他现实世界的二进制格式)符号定义语法(包括弱符号)没有提供任何方式来从其他地方引用外部定义来提供定义。


0
投票

您可以使用GNU-ld free选项获得所需的结果。

© www.soinside.com 2019 - 2024. All rights reserved.