3

我正在开发一些在有限时间内运行裸机的软件,直到 Linux 端口准备好迎接黄金时段。该软件正在与提供 malloc、clock_gettime 等实现的 uClibc 链接,但问题是它们都依赖于只会捕获硬件的系统调用,因为我们还没有内核来处理它们。

我一直在使用别名来覆盖我们需要的函数,即 our_mem.c:

void* our_malloc(size_t size) { .. }
void* malloc(size_t size) __attribute__ ((malloc, weak, alias("our_malloc")));

问题是这似乎有点随机。我可以有一个构建,其中所有调用都正确别名,在下一个构建中,我修改了不相关文件中的某些内容,它突然工作到一个点,然后其中一个调用转到 uClibc malloc。起初我认为这是链接顺序的问题,但是构建系统总是以相同的顺序链接,并且相同的调用将在一个构建中工作并在下一个构建中失败。二进制文件(显然)是静态链接的。

我不确定这到底是如何使用别名的,因为我没有找到太多关于它的文档,但几年前我已经在 malloc 和朋友(也使用 uClibc)上成功使用了这种技术,然后它一直工作.

4

0 回答 0