链接器 - 使用自己的stdlib实现

时间:2017-07-14 15:34:52

标签: gcc linker std ld linker-scripts

我有问题。项目的要求是我们无法将我们的应用程序与标准库链接(因此-nostdlib在gcc中已启用)。

my_stdlib.c 包含所有功能 my_memset my_memcpy 的实现。 ..但链接器需要 memcpy 来复制结构

MyStruct struct = my_struct;

并抱怨“未定义对` memcpy '的引用”,这当然是正确的。

是否可以使用链接描述文件将 memcpy 重新映射到 my_memcpy ,传递给 ld的参数或其他方式,所以链接器可以使用我们的实现来复制结构?

可能 -wrap,功能 可能会有所帮助,但我无法将 my_memcpy 更改为 __ wrap_memcpy

2 个答案:

答案 0 :(得分:1)

在GCC级别,您可以使用以下符号将memcpy符号重定向到其他符号:

void *memcpy (void *, const void *, size_t) __asm__ ("my_memcpy");

这也适用于内部生成的memcpy来电。 (使用GCC。我认为它不会改变Clang的内部呼叫站点。)

答案 1 :(得分:0)

使用-fno-builtin进行编译。这应该避免它。