【问题标题】:Building libcurl with static linking to openssl使用静态链接构建 libcurl 到 openssl
【发布时间】:2020-03-22 16:16:16
【问题描述】:

我正在尝试使用静态链接到 openssl 来构建 libcurl。因此,为了实现这一点,我使用了以下配置:

OpenSSL:

LDFLAGS="-static”
LIBS="-ldl”

卷曲:

LDFLAGS="-static”
CPPFLAGS="-I$(CURDIR)/$(3RDPARTY_DIR)$(OPENSSL)/include   
LDFLAGS="-L$(CURDIR)/$(3RDPARTY_DIR)$(OPENSSL)"
./configure --disable-shared --without-zlib --without-libidn --without-librtmp --disable-ldap —-with-ssl=<path where my openssl is installed>

有了这个,我将根据我的需要生成 libcurl.a 并将其链接到我能够成功处理 HTTPS 连接的代码。

但是为了学习的目的,我想知道 SSL 符号是否真的集成到 libcurl 中。 所以为此,我尝试使用nm 命令:

nm -A libcurl.a | grep “SSL_"

但它将所有 SSL 符号显示为未定义。例如,

U SSL_connect
U SSL_ctrl

这是否意味着来自 libssl.a 和 libcrypto.a 的符号实际上并未集成到 libcurl 中?

如果是,如何将它们实际集成到 libcurl.a 中?

感谢任何帮助我理解这一点。

【问题讨论】:

    标签: openssl libcurl static-linking nm


    【解决方案1】:

    是的,这意味着 OpenSSL 符号没有集成到 libcurl 中。

    当您构建静态版本的 libcurl 时,您会得到一个适合静态链接的 libcurl.a 文件。但是你需要在链接器命令行上提供所有(静态)依赖库,你通常不会首先将它们全部链接到一个静态库中。 (如果你想这样做,你必须自己做;curl 构建系统不会这样做。)

    当您想将您的应用程序与使用静态 OpenSSL 构建的静态 libcurl 链接时,您可以链接您的应用程序并在链接器命令行上提供所有必要的库。在 *nix 上,这意味着 -lcurl -lcrypto -lssl...

    (大多数 libcurl 构建也将使用额外的依赖项)。

    【讨论】:

    • 感谢您的回复。我尝试在链接器命令行中添加 openssl 依赖项,但它似乎对我不起作用。我已经更新了上面的 openssl 和 curl 链接配置。我可能在哪里犯错?
    • 向我们展示详细信息。你的链接命令行和你得到的错误!
    • 实际上,我没有收到任何错误。但符号未显示在 nm 命令输出 (nm -A libcurl.a | grep "SSL") 中。这就是我怀疑的原因。链接配置详细信息已在 cURL 配置部分的上述问题中提及。
    • libcurl 不会提供这些符号,它们由 OpenSSL 库提供。链接你的程序和ldd 它以验证它是静态的,如果它有效,那么你很好。你看错东西了。
    • 啊……明白了。我链接了程序并做了 ldd (应该列出共享库)。它显示:“ linux-vdso.so.1 => (0x00007fff01ffe000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f2fcd118000) libpthread.so.0 => /lib/ x86_64-linux-gnu/libpthread.so.0 (0x00007f2fccefa000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2fccbf3000) libc.so.6 => /lib/x86_64- linux-gnu/libc.so.6 (0x00007f2fcc82d000) /lib64/ld-linux-x86-64.so.2 (0x00007f2fcd351000)"
    猜你喜欢
    • 2011-11-08
    • 2011-05-14
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    相关资源
    最近更新 更多