curl 在运行时需要 openssl 吗?

dan*_*dan 6 c macos curl openssl

Curl 将 openSSL 列为https://curl.se/docs/libs.html的外部依赖项。

但是,如果我这样做otool -L $(which curl)(macOS 12.5),我会得到以下输出:

/usr/bin/curl:
    /usr/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 9.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.120.1)
Run Code Online (Sandbox Code Playgroud)

没有 openSSL。这是因为它只需要编译/构建curl,但在运行时不需要作为外部库?

如果删除 openSSL,curl 仍然有效吗?

Dan*_*erg 15

如果您的curl 知道如何使用HTTPS 或任何其他需要TLS 的协议,那么您的curl 依赖于TLS

OpenSSL 就是这样一个库,但curl 目前支持13 个不同的 TLS 库,可以构建使用它们。

如果您的curl 使用 TLS 协议,则它取决于这些受支持的库之一。在 macOS 上,Apple 最近似乎更青睐 libressl,但过去他们也直接使用 Secure Transport 进行构建。

输出curl -V在第一行显示了它使用的 TLS 库,但可能需要一点经验才能完全理解它。括号内提到的 TLS 库有可选的由应用程序在启动时

otool 输出中显示的库是动态链接的在运行时这意味着当您调用curl 时它们需要存在并且可加载,以便运行时链接器可以加载它们并正常执行curl。

如果您自己构建curl或下载其他人的构建,您也可以静态链接它,然后所有库都可以构建到一个巨大的二进制blob中,但这不是在macOS和Linux等操作系统中通常构建和发布curl的方式分布。