openssl - 使用静态链接构建 libcurl 到 openssl

标签 openssl libcurl static-linking nm

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

OpenSSL:

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

curl :

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 中。

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

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

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

关于openssl - 使用静态链接构建 libcurl 到 openssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59064582/

相关文章:

android - 通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件

linux - SSL 库错误 : error: SSL routines:ssl3_get_client_hello:no shared cipher - Too restrictive SSLCipherSuite or using DSA server certificate

php - 使用 curl 提交/检索表单结果

c++ - 如何正确删除指向回调函数的指针。

c++ - 如何将 C++ 库静态链接到 OSX 中的 C 应用程序?

ssl - "Unable to load any of the alternatives"使用 Quicklisp 安装 CL+SSL 即使在安装 open ssl 之后

java - ssh:重定位错误:ssh:符号 EVP_enc_null,版本 OPENSSL_1.0.0 未在具有链接时间引用的文件 libcrypto.so.1.0.0 中定义

Cygwin:Libcurl 不工作

c++ - 在 Visual Studio 2008 中链接 libav 库

c++ - 将 C++ 编译成可移植的 linux 二进制文件