首页 > 解决方案 > 如何将新的源文件添加到 glibc makefile?

问题描述

最近我对学习 C 的堆管理(malloc 模块)产生了兴趣。我想将 malloc 源文件(例如 malloc.c、arena.c)分解成更小的文件,以便我更容易阅读和学习。我正在使用并已按照 wikiglibc 2.23上的说明在本地成功构建它(在单独的“构建”文件夹中) 。Ubuntu 14.04

作为我最初的尝试,我将它们__malloc_assert放入文件中massert.hmassert.c但后来意识到我不知道如何将它们添加到 makefile 中,以便它们可以被编译和链接

搬出__malloc_assertmalloc.c,再次运行时出现链接错误make,这是意料之中的:

/home/mvs/git/glibc/build/libc_pic.os: In function `detach_arena':
/home/mvs/git/glibc/malloc/arena.c:629: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/build/libc_pic.os: In function `mremap_chunk':
/home/mvs/git/glibc/malloc/malloc.c:2832: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/malloc/malloc.c:2813: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/malloc/malloc.c:2812: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/malloc/malloc.c:2830: undefined reference to `__malloc_assert'
/home/mvs/git/glibc/build/libc_pic.os:/home/mvs/git/glibc/malloc/malloc.c:2776: more undefined references to `__malloc_assert' follow

我想我应该看看在malloc/malloc.cmakefile中是如何使用的,但我找不到它的使用位置。我主要看以下文件:

或者,我搜索了makefile邮件libc-help列表并查看了所有结果,但没有找到与我想要的匹配的结果。其中两个线程,“glibc + 添加新函数”“向 glibc 添加函数?” ,正在谈论向库中添加一个新函数,这不是我的情况(我不是在添加新函数,而只是重组代码)。

我对 makefile 系统有点陌生,并且仍在阅读 GNU makefile 手册,但认为在这里发送电子邮件可能会让我更快地摆脱困境。

谢谢!

标签: cmakefilegnuglibc

解决方案


您需要将massert(not massert.c)添加routinesmalloc/Makefile.

有几个这样的变量:routinesis for libcit self,但也有libm-routinesfor libm,等等。

默认情况下,这些源文件是为所有变体构建的:静态(.o)、共享(.os)、分析(.op虽然默认情况下禁用分析构建)。一些特殊功能仅用于静态构建(.oS它们进入libc_nonshared.a)并且也列在其中static-only-routines。可以使用该elide-routines.os变量排除特定的构建目标。


推荐阅读