静态编译openssl二进制文件

use*_*538 5 openssl

从源tarball构建时,由config&make命令生成的openssl二进制文件动态链接到以下库:

    linux-vdso.so.1 =>  (0x00007fffa75fe000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff7f79ab000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff7f75e2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007ff7f7bd2000)
Run Code Online (Sandbox Code Playgroud)

我的猜测是,如果我可以静态链接到lib gcc,则对其他共享库的依赖关系也将消失。

问题是如何获取配置脚本以生成静态链接的二进制文件

在Windows上构建的过程也一样吗?

mpp*_*ppf 5

对我有用的是通过-static --static迈出./config一步。--no-shared似乎记录在 INSTALL 中,但导致构建失败。-static其本身也导致构建失败。

./config --static -static


小智 1

我在寻找同样的东西时发现了这篇文章。我不知道配置脚本执行此操作的正确语法,但这就是我实现它的方法。

cd /tmp
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar -zxvf openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
./config
Run Code Online (Sandbox Code Playgroud)

然后我将“-static -static-libgcc”添加到 openssl-1.0.1e/Makefile 的 CFLAG 行中(注意这是在我运行 ./config 之后)。然后我像平常一样构建它。

make INSTALL_PREFIX=/tmp/package-root install
Run Code Online (Sandbox Code Playgroud)

现在是静态编译的

$ ldd /tmp/package-root/usr/local/ssl/bin/openssl
        not a dynamic executable
Run Code Online (Sandbox Code Playgroud)