我有问题。项目的要求是我们无法将我们的应用程序与标准库链接(因此-nostdlib在gcc中已启用)。
my_stdlib.c 包含所有功能 my_memset , my_memcpy 的实现。 ..但链接器需要 memcpy 来复制结构
MyStruct struct = my_struct;
并抱怨“未定义对` memcpy '的引用”,这当然是正确的。
是否可以使用链接描述文件将 memcpy 重新映射到 my_memcpy ,传递给 ld的参数或其他方式,所以链接器可以使用我们的实现来复制结构?
可能 -wrap,功能 可能会有所帮助,但我无法将 my_memcpy 更改为 __ wrap_memcpy 。
答案 0 :(得分:1)
在GCC级别,您可以使用以下符号将memcpy
符号重定向到其他符号:
void *memcpy (void *, const void *, size_t) __asm__ ("my_memcpy");
这也适用于内部生成的memcpy
来电。 (使用GCC。我认为它不会改变Clang的内部呼叫站点。)
答案 1 :(得分:0)
使用-fno-builtin
进行编译。这应该避免它。