glibc源码编译

前言

本篇文章主要是记录我通过编译libc过程解决的一些困惑

glibc源码编译

编译部分请参考这篇博客: glibc的编译、安装和调试

为了方便以及排除一些可能的错误,我们直接选用与当前操作系统一致的glibc版本进行调试版本的编译

正文

我会在这里对glibc编译中一些感兴趣的部分进行介绍

glibc 编译

首先说明,我的GLIBC版本为2.35

所以我下载了glibc-2.35的源码进行编译

编译之后产生的文件被我放在了build 文件夹

随后通过makeglibc安装到/opt/glibc-2.35目录下,我们熟悉的libc.so在这里面

当然,libc.so里面是指向libc.so.6的路径,这点我们即便只看文件大小应该也能看出来,不过无关紧要了,我们只需要知道这里有libc就够了

我们可能会看到编译之后的libc文件远大于我们系统自带的libc文件,

别担心,这是正常情况,这是因为我们没有剥离调试符号 且编译时未选择大小优先的优化级别 并且启用了额外的调试符号

libc 链接

现在我们或许可以开始思考libc文件是怎么来的,为了方便拿我们熟悉的malloc文件举例

源码经过编译后不会直接变成libc文件,而是需要我们去将目标文件链接到一起,我们可以看到从mallloc源码编译出了四个东西malloc.o malloc.o.d malloc.os malloc.os.d

其中malloc.o属于普通目标文件一般用于静态链接文件,malloc.os则属于位置无关目标文件在编译选项中选择了位置无关编译方式(-fPIC),这样他就可以用来链接为库文件,也即libc库文件。

至于.d结尾的文件,这里面存储的是malloc的依赖文件,由编译器的-MD或者-MMD选项自动生成

带调试版libc使用

废了这么大劲对libc文件编译,除了想要深入了解libc编译的过程以及源码怎么变成glibc文件以外,当然还想要使用带调试的glibc文件啦

gcc -g malloc_menu.c -Wl,--rpath=/opt/glibc-2.35/lib -Wl,--dynamic-linker=/opt/glibc-2.35/lib/ld-linux-x86-64.so.2 -o debug_SouceGlibc_malloc_menu

使用malloc_menu.c文件进行编译,且指定libc文件和ld文件,编译为带调试符号版本。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇