我有一个仅标头的库,当前正在调用malloc
和free
此标头包含在许多不同的静态库中,这些静态库用于构建配置不同的程序。
我希望能够在链接时将这些调用替换为对另一个分配器的调用-基于链接步骤中是否包含该分配器库,而不会影响对malloc
和free
的其他调用。 >
[我的想法是让库调用customizable_malloc
和customizable_free
,并且将这些符号默认情况下解析为malloc
和free
-然后分配器库可以为customizable_malloc
和[ C0]
但是,我搞砸了weak / alias / weakref属性,我似乎什么也没用。有办法吗?
注:
我知道我可以创建一个间接层:customizable_free
可能是调用malloc的函数的弱别名。但这增加了似乎不必要的间接级别。理想情况下,这是链接器在遇到对customizable_malloc的调用时要采取的步骤:
澄清说明:
customizable_malloc
完成。该库可以创建默认为#define
和customizable_malloc
的宏customizable_free
和malloc
。但是,在这种情况下这是行不通的,因为在不知道是否存在覆盖的情况下将事物内置到静态库中。 我有一个仅标头的库,当前正在调用malloc和free。此标头包含在许多不同的静态库中,这些静态库用于构建配置不同的程序。我会...
额外的间接级别是唯一的方法。 ELF(和其他现实世界的二进制格式)符号定义语法(包括弱符号)没有提供任何方式来从其他地方引用外部定义来提供定义。
您可以使用GNU-ld free
选项获得所需的结果。