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)

没有openssl.这是因为它只需要编译/构建cURL,而不需要在运行时作为外部库吗?

如果我删除openssl,cURL还能工作吗?

推荐答案

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

OpenSSL就是这样一个库,但是cURL目前支持13个不同的TLS库,它可以构建为使用这些库.

如果您的curl使用TLS协议,它取决于其中一个受支持的库.在macOS上,苹果最近似乎更青睐libressl,但过go 他们也直接使用安全传输进行构建.

curl -V的输出显示它在第一行中使用了哪个TLS库,但可能需要一些经验才能完全理解它.括号中提到的TLS库有optionally个是由应用程序在启动时启用的.

OTool输出中显示的库在运行时是dynamically linked个.这意味着当您调用cURL时,它们需要存在并可加载,以便运行时链接器可以加载它们并很好地执行cURL.

如果您自己构建cURL或下载别人的构建,您也可以将其链接statically,然后所有的库都可以构建到一个巨大的二进制BLOB中,但在MacOS和Linux发行版等操作系统中,cURL通常不是这样构建和提供的.

C++相关问答推荐

librsvg rsvg_handle_get_dimensions获取像素大小与浏览器中的渲染大小没有不同

Pure Win32 C(++)-除了替换控件的窗口程序之外,还有其他方法可以在输入时禁用按钮吗?

当包含头文件时,gcc会发出隐式函数声明警告

如何通过Zephyr(Devicetree)在PR Pico上设置UTE 1?

LibpCap禁用监视器模式(C、MacOS)

可以将C变量限制为特定的读/写速度吗?

函数内的局部字符指针

GDB输出ARM助记符

如何编写一个for循环来计算C中各项的总和?

接受任何参数的函数指针是否与接受不同参数的函数兼容

为四维数组中的Dim-1和Dim-3重新分配空间

Fprintf正在写入多个 struct 成员,并且数据过剩

安全倒计时循环

';malloc():损坏的顶部大小';分配超过20万整数后

可以对两种 struct 类型中的任何一种进行操作的C函数

C语言程序流程解释

为什么使用 C 引用这个 char 数组会导致 Stack smasing?

我该如何处理这个 C 90 代码中的内存泄漏?

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?

如何在 C 中编辑 struct 体中的多个变量