【问题标题】:Difference between curl/curl.h, libcurl, libcurl4-openssl-dev, libcurl4-nss-dev libraries?curl/curl.h、libcurl、libcurl4-openssl-dev、libcurl4-nss-dev 库之间的区别?
【发布时间】:2014-02-05 01:18:08
【问题描述】:

我有以下 curl 标头,我仍然可以安装上面提到的 libcurl4 包-

kafka@metamorphosis:~$ ll /usr/include/curl/
total 200
drwxr-xr-x  2 root root  4096 Jan 16 13:29 ./
drwxr-xr-x 51 root root 20480 Jan 16 13:29 ../
-rw-r--r--  1 root root  7303 Dec 18 01:11 curlbuild.h
-rw-r--r--  1 root root 83928 Dec 18 01:11 curl.h
-rw-r--r--  1 root root  8934 Dec 18 01:11 curlrules.h
-rw-r--r--  1 root root  2741 Dec 18 01:11 curlver.h
-rw-r--r--  1 root root  3472 Dec 18 01:11 easy.h
-rw-r--r--  1 root root  2790 Dec 18 01:11 mprintf.h
-rw-r--r--  1 root root 13836 Dec 18 01:11 multi.h
-rw-r--r--  1 root root  1330 Dec 18 01:11 stdcheaders.h
-rw-r--r--  1 root root 36918 Dec 18 01:11 typecheck-gcc.h

libcurl4-openssl-devlibcurl4-nss-dev 彼此之间以及这些 curl.h 文件有何不同?

在 ubuntu 中使用 apt-get 安装这两个软件包后,我注意到以下文件-

/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.3.0
/usr/lib/x86_64-linux-gnu/libcurl.so.4.3.0
/usr/lib/x86_64-linux-gnu/libcurl.so.4
/usr/lib/x86_64-linux-gnu/libcurl.la
/usr/lib/x86_64-linux-gnu/libcurl.so.3
/usr/lib/x86_64-linux-gnu/libcurl.a
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
/usr/lib/x86_64-linux-gnu/libcurl.so
/usr/lib/x86_64-linux-gnu/pkgconfig/libcurl.pc

现在,如果我有一个程序,其行如- #include<curl/curl.h> ,我该如何编译它?

gcc -L /usr/include/curl/ -lcurl nginx-isolated.c 似乎不起作用。

【问题讨论】:

  • “似乎不起作用”是什么意思?如果您有错误,请编辑您的问题以包含它们。
  • 另外,尝试将库列表放在 源之后,例如gcc nginx-isolated.c -lcurl.
  • @JoachimPileborg:gcc 不包括 curl 库。 gcc nginx-isolated.c -lcurl 工作。 :) 你能回答前半部分的问题吗?这“有效”,但我仍然不明白它的机制。
  • 我的意思是这个-How are libcurl4-openssl-dev and libcurl4-nss-dev different from each other and from these curl.h files?

标签: c curl libcurl


【解决方案1】:

不同的 libcurl4-*-dev 软件包是为使用不同的 TLS 后端而构建的 libcurl。它们都仍然提供(几乎)相同的 API。它们是互斥的,无论您安装哪个软件包,都使用“-lcurl”与 libcurl 链接。

curl/curl.h 是一个头文件,无论你使用哪个 TLS 后端都是一样的。

libcurl 是库的名称。

【讨论】:

  • 如果说libcurl*-dev 包是libcurl 的包装器,curl.hcurlver.h 等是(未构建的?)libcurl 库的标头,这有多正确。
  • 不完全一样。我宁愿说 libcurl*-dev 是提供不同实例或风格的 libcurl 的包。
【解决方案2】:

当您使用 HTTPS、FTPS 或其他使用 TLS 的服务器使用存储中存在的 CA 签名的证书进行通信时,您可以确定远程服务器确实是它声称的服务器。这样您就可以验证信任站点。

LibCurl 具有三种 TLS 后端。

  • 使用 NSS 进行证书验证
  • 使用 OpenSSL 进行证书验证
  • 使用 GnuTLS 进行证书验证

这三个是用于建立安全链接和验证信任 CA 证书的库,但每个库都有自己的功能、优缺点。

OpenSSL 是用于传输层安全 (TLS) 和安全套接字层 (SSL) 协议的强大、商业级且功能齐全的工具包。它也是一个通用的密码库。

GnuTLS 是实现 SSL、TLS 和 DTLS 协议和围绕它们的技术的安全通信库。它提供了一个简单的 C 语言应用程序编程接口 (API) 来访问安全通信协议以及解析和编写 X.509、PKCS #12 和其他所需结构的 API。

网络安全服务(NSS) 是一组库,旨在支持启用安全的客户端和服务器应用程序的跨平台开发。使用 NSS 构建的应用程序可以支持 SSL v3、TLS、PKCS #5、PKCS #7、PKCS #11、PKCS #12、S/MIME、X.509 v3 证书和其他安全标准。

非常重要的一点是,在编程时,您必须选择一个单独的库来使用,因为不可能将它们组合起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多