【问题标题】:How to build libcurl-gnutls.so from source code如何从源代码构建 libcurl-gnutls.so
【发布时间】:2021-07-24 00:19:09
【问题描述】:

在哪里可以找到构建 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 (How to create lib curl-gnutls.so.4) 的问题,但答案是通过 apt-get install 安装预构建版本,我不允许这样做。

【问题讨论】:

标签: linux ubuntu curl gnutls


【解决方案1】:

libcurl-gnutls.so 实际上只是来自一个支持 gnutls 的 cURL。你可以在这里找到存储库:https://github.com/curl/curl

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

这是您可能需要的 sn-p:

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

【讨论】:

    【解决方案2】:

    这是根据每个人的意见拼凑而成的完整答案(特别感谢 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 并将具有所需的版本信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-23
      • 2010-11-17
      • 2021-10-07
      • 2012-01-21
      • 2012-06-13
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多