curl在运行时是否需要openssl?

6
Curl在 https://curl.se/docs/libs.html 中将openSSL列为外部依赖项。 但是,如果我在macOS 12.5上运行otool -L $(which curl)命令,则会得到以下输出:
/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)

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

如果我删除openSSL,curl仍然能正常工作吗?


2
如果你运行 otool -L usr/lib/libcurl.4.dylib 呢,看看实际库依赖于什么? - Some programmer dude
1
值得一提的是,也许值得检查运行/usr/bin/curl --version是否提到了OpenSSL或者其他选项,比如DarwinSSL。 - Wander Nauta
@Someprogrammerdude 我刚试了一下,但是我得到了这个错误:error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool-classic: can't open file: /usr/lib/libcurl.4.dylib (No such file or directory) - dandan
@WanderNauta 输出的第一行是 curl 7.79.1 (x86_64-apple-darwin21.0) libcurl/7.79.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.11 nghttp2/1.45.1。我猜这意味着它使用了 LibreSSL?但是它是静态链接还是动态链接的呢? - dandan
2
可能只需要使用 OpenSSL 来进行加密连接。 - stark
1个回答

15

如果你的curl支持HTTPS或者其他需要TLS协议的通讯协议,那么它就依赖于一个TLS库。

OpenSSL是这样一种库,但现在curl支持13种不同的TLS库用于构建。

如果curl支持TLS协议,它就依赖于其中的一个支持库。在macOS上,苹果公司最近似乎更喜欢libressl,但过去他们也使用Secure Transport直接进行构建。

curl -V命令的输出会显示它使用的TLS库在第一行,但可能需要一些经验才能完全理解。在括号中提到的TLS库是应用程序在启动时可选启用的。

otool输出显示的库在运行时是动态链接的。这意味着它们必须存在并且可以被加载,以便在调用curl时运行时链接器可以加载它们并正确执行curl。

如果你自己构建curl或下载别人的构建版本,你也可以将其链接静态地,然后所有库都可以被构建为单个巨大的二进制块,但这不是curl通常在类似macOS和Linux发行版的操作系统中构建和分发的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接