c - 如何将新的源文件添加到 glibc makefile?
问题描述
最近我对学习 C 的堆管理(malloc 模块)产生了兴趣。我想将 malloc 源文件(例如 malloc.c、arena.c)分解成更小的文件,以便我更容易阅读和学习。我正在使用并已按照 wikiglibc 2.23
上的说明在本地成功构建它(在单独的“构建”文件夹中) 。Ubuntu 14.04
作为我最初的尝试,我将它们__malloc_assert
放入文件中massert.h
,massert.c
但后来意识到我不知道如何将它们添加到 makefile 中,以便它们可以被编译和链接。
搬出__malloc_assert
后malloc.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.c
makefile中是如何使用的,但我找不到它的使用位置。我主要看以下文件:
- glibc/Makeconfig
- glibc/Makefile
- glibc/规则
- glibc/malloc/Makefile
或者,我搜索了makefile
邮件libc-help
列表并查看了所有结果,但没有找到与我想要的匹配的结果。其中两个线程,“glibc + 添加新函数”和“向 glibc 添加函数?” ,正在谈论向库中添加一个新函数,这不是我的情况(我不是在添加新函数,而只是重组代码)。
我对 makefile 系统有点陌生,并且仍在阅读 GNU makefile 手册,但认为在这里发送电子邮件可能会让我更快地摆脱困境。
谢谢!
解决方案
您需要将massert
(not massert.c
)添加routines
到malloc/Makefile
.
有几个这样的变量:routines
is for libc
it self,但也有libm-routines
for libm
,等等。
默认情况下,这些源文件是为所有变体构建的:静态(.o
)、共享(.os
)、分析(.op
虽然默认情况下禁用分析构建)。一些特殊功能仅用于静态构建(.oS
它们进入libc_nonshared.a
)并且也列在其中static-only-routines
。可以使用该elide-routines.os
变量排除特定的构建目标。
推荐阅读
- intellij-idea - Intellij Flutter 为导入添加前缀
- regex - 从使用 grep 或 awk 的人那里查找最后一个 pts 编号
- java - 添加项目时,如何防止recyclerview自动滚动到最后一个项目的位置?
- javascript - 如何动态访问嵌套错误/触及formik字段
- python - 使用循环和计时器自动重新加载 webView 小部件
- laravel - 不能将两个以上的参数传递给路由
- amazon-web-services - 无法在 athena 中查询 58 MB 文件
- algorithm - 根据价格和重量限制最小化运输成本
- kotlin - 如何使用针对 linuxX64 的 ktor-client-core 修复“未解决的参考:HttpClient”
- javascript - 将对象序列化为没有转义字符的 uri