最近,我对学习C(malloc模块)的堆管理感兴趣。我想将malloc源文件(例如malloc.c,arena.c)分解成较小的文件,以便为我轻松阅读和学习。我正在使用glibc 2.23
,并已按照Wiki上的说明在Ubuntu 14.04
上本地(单独的“ build”文件夹中)成功构建了它。
作为我的最初尝试,我将__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文件中是如何使用的,但是我找不到它的使用位置。我主要看以下文件:
或者,我在libc-help
mailing list上搜索了makefile
并查看了所有结果,但没有找到与我想要的匹配的结果。 "glibc + add new function"和"Adding a function to glibc?"这两个线程正在谈论向库中添加新函数,这不是我的情况(我不是在添加新函数,而只是重构代码)。>
我是makefile系统的新手,并且仍在阅读GNU makefile手册,但是认为在此处拍摄电子邮件可能会使我更快地摆脱困境。
谢谢!
答案 0 :(得分:1)
您需要在massert
中的massert.c
变量中添加routines
(而不是malloc/Makefile
)。
有几个这样的变量:routines
用于libc
本身,但是libm-routines
则用于libm
,依此类推。
默认情况下,这些源文件是针对所有变体构建的:静态(.o
,共享(.os
),性能分析(.op
,默认情况下性能分析版本是禁用的)。一些特殊功能仅用于静态构建(.oS
,它们进入libc_nonshared.a
),并在static-only-routines
中列出。可以使用elide-routines.os
变量排除特定的构建目标。