使用静态链接构建 libcurl 到 openssl

use*_*352 2 openssl libcurl static-linking nm

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

\n\n

OpenSSL:

\n\n
LDFLAGS="-static\xe2\x80\x9d\nLIBS="-ldl\xe2\x80\x9d\n
Run Code Online (Sandbox Code Playgroud)\n\n

卷曲:

\n\n
LDFLAGS="-static\xe2\x80\x9d\nCPPFLAGS="-I$(CURDIR)/$(3RDPARTY_DIR)$(OPENSSL)/include   \nLDFLAGS="-L$(CURDIR)/$(3RDPARTY_DIR)$(OPENSSL)"\n./configure --disable-shared --without-zlib --without-libidn --without-librtmp --disable-ldap \xe2\x80\x94-with-ssl=<path where my openssl is installed>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

但出于学习目的,我想知道 SSL 符号是否实际集成到 libcurl 中。\n因此,我尝试使用nm命令:

\n\n
nm -A libcurl.a | grep \xe2\x80\x9cSSL_"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
U SSL_connect\nU SSL_ctrl\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

如果是,可以采取什么措施将它们实际集成到 libcurl.a 中?

\n\n

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

\n

Dan*_*erg 8

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

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

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

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