从动态链接的可执行文件及其依赖项创建静态链接的可执行文件

从动态链接的可执行文件及其依赖项创建静态链接的可执行文件

cat个例子,如果我这样做ldd $(which cat),它表明

linux-vdso.so.1 (0x00007fff8afbb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb3102dd000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb310524000)

有没有办法将cat二进制文件和这三个so文件捆绑在一起,使其成为静态链接?

我的目的是在容器内使用它。

答案1

稳定器可以为您做到这一点:它将捆绑一个动态链接的二进制文件及其依赖项。结果与您首先静态构建二进制文件所得到的结果完全不同,但它会给您想要的结果。

您需要禁用布局随机化才能创建“静态”二进制文件:

printf 0 | sudo tee /proc/sys/kernel/randomize_va_space

(然后恢复原始值)。

根据您在容器中真正想要的二进制文件,您可能会发现使用静态 Busybox 之类的东西更简单。

请注意,第一个依赖项不是您需要关心的动态库,而是内核提供的vDSO

相关内容