如何从源代码构建 libcurl-gnutls.so

How to build libcurl-gnutls.so from source code

在哪里可以找到构建 libcurl-gnutls.so 的源代码和说明?

我正在做一个需要 libcurl-gnutls.so 的项目。我需要从源代码构建它 - 我不允许简单地使用“apt-get install libcurl”安装它。不幸的是,我的 google-fu 让我失望了,我无法在任何地方找到源代码存储库或构建 libcurl-gnutls.so 的说明。

这是我的发现:

Linux-from-scratch 有关于构建 libcurl.so 的详细文档说明,此处:https://www.linuxfromscratch.org/blfs/view/svn/basicnet/curl.html。这让我可以使用 gnutls 构建 libcurl.so,但不能使用 libcurl-gnutls.so.

curl 网站 (curl.se) 在此处提供了有关其各种选项的详细说明:https://curl.se/docs/install.html。这些向我展示了如何使用 gnutls 构建 libcurl,但最终产品仍然是 libcurl.so,而不是 libcurl-gnutls.so.

当我在我的项目上 运行 ldd -r 时,它会识别它需要的功能(curl_easy_init、curl_easy_setopt、curl_easy_perform 和 curl_easy_cleanup ).我可以在 libcurl.so 和预建的 libcurl-gnutls.so 中找到这些符号。这使我怀疑 libcurl-gnutls.so libcurl.so,以不同的名称发布。但是,将 libcurl.so 重命名为 libcurl-gnutls.so 不足以满足依赖要求。我可以尝试更改 libcurl 项目以将其名称和版本设置为 libcurl-gnutls(我不知道该怎么做——我会四处寻找直到弄清楚),但我不知道这有多合适。

我在 Stack Overflow 上发现了另一个关于 libcurl-gnutls 的问题 (),但答案是通过 apt-get install 安装预构建版本,我不允许这样做做。

libcurl-gnutls.so 实际上只是来自使用 gnutls 支持构建的 cURL。您可以在此处找到存储库:https://github.com/curl/curl

查看 docs/INSTALL.md。它包含构建 cURL 所需的所有信息,特别是关于 Building from git.

的部分

这是您可能需要的片段:

./configure --with-openssl [--with-gnutls --with-wolfssl]
make
make test (optional)
make install

这是根据每个人的意见拼凑而成的完整答案(特别感谢 Knud Larsen 和 Wassim Dhif):

libcurl-gnutls.so 只是 libcurl.so 使用 gnutls 支持构建的。该项目的档案在这里:https://curl.se/download

  1. 通过编辑 ltmain.sh 更改构建 libcurl.so 的 SONAME 以更改:

     if test -n "$soname_spec";
     then eval soname=\"$soname_spec\"
    

收件人:

    if test -n "$soname_spec"; then
    soname=libcurl-gnutls.so.4

我确定有更优雅的方法,但这行得通,我需要继续。

或者,您可以在构建 libcurl.so 之后修改 SONAME

    patchelf –set-soname libcurl-gnutls.so.4 libcurl.so
  1. 检查您的客户端(需要 libcurl-gnutls.so 作为依赖项的程序或共享库),看它是否需要版本信息。 例如,当我 运行 objdump -p myprogram,我得到这个:

     Version References:
     required from libcurl-gnutls.so.4:
     0x0b103d23 0x00 14 CURL_GNUTLS_3
    

要使用此版本信息构建 libcurl-gnutls.so

2a。设置版本信息为版本3: 在 lib/libcurl.vers.in 中更改:

CURL_@CURL_LT_SHLIB_VERSIONED_FLAVOUR@4

收件人:

CURL_@CURL_LT_SHLIB_VERSIONED_FLAVOUR@3

2b。配置 libcurl 项目时使用 --enable-versioned-symbols。这会添加所需的版本信息。

./configure --with-gnutls --enable-versioned-symbols [other arguments as needed]

最终产品可能命名为 libcurl.so,但可以重命名。它将其 SONAME 设置为 libcurl-gnutls.so.4 并将具有所需的版本信息。