问题描述
在哪里可以找到构建 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 安装预构建版本,但我不允许这样做。
解决方法
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
is 只是 libcurl.so
用 gnutls 支持构建的。该项目的档案在这里:https://curl.se/download
-
通过编辑
libcurl.so
来更改构建ltmain.sh
的 SONAME:if test -n "$soname_spec"; then eval soname=\"$soname_spec\"
致:
if test -n "$soname_spec"; then
soname=libcurl-gnutls.so.4
我确信有一种更优雅的方式来做到这一点,但这很有效,我需要继续前进。
或者,您可以在构建 SONAME
后修改 libcurl.so
:
patchelf –set-soname libcurl-gnutls.so.4 libcurl.so
-
检查您的客户端(需要
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. 中更改:
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
并具有所需的版本信息。