【发布时间】:2021-11-10 03:21:37
【问题描述】:
以下问题听起来确实像 XY 问题,但相信我,它不是。这与this问题中进行的冗长调查有关。
我有充分的理由相信该问题的解决方案(不是针对那里的最小示例,而是针对我的实际代码)涉及确保memmove() 不是通过共享库调用,而是作为静态调用, 直接从我的代码到 memmove() 而不通过 PLT,或者如果 memmove() 的代码内联在我的代码中,甚至更好。
但是,我找不到命令行开关或其他任何东西来防止动态调用memmove()(注意动态调用是通过反汇编输出来确认的,在使用-O3 构建之后。)开关存在吗?虽然我可以为我的平台获取一些优化的memmove() 代码(例如this),但我宁愿避免引入一些可能会在未来架构中被淘汰的代码,而且我也不认为这是一种好的编程实践。
我在 Raspberry Pi 4 上使用带有版本字符串 Ubuntu clang version 12.0.0-3ubuntu1~21.04.1 的 clang。uname -a 的输出是 Linux rpi4 5.11.0-1017-raspi #18-Ubuntu SMP PREEMPT Mon Aug 23 07:34:31 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux。
【问题讨论】:
-
不是您真正想要的,但this answer 末尾的脚注可能会引起您的兴趣。
标签: c clang shared-libraries dynamic-linking