You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法静态链接libcurl且动态链接其依赖库问题

静态链接libcurl但动态链接其依赖库时的链接错误问题

在Ubuntu Noble容器中,尝试通过curl-config --static-libs实现静态链接libcurl、动态链接其所有依赖库,但编译时链接器报错无法找到多个依赖库。以下是详细操作及错误信息:

1. 查看静态链接参数

执行curl-config --static-libs获取静态链接所需参数:

root@74c0362a3530:/# curl-config --static-libs
-Wl,-Bstatic -lcurl -Wl,-Bdynamic -lnghttp2 -lidn2 -lrtmp -lssh -lssh -lpsl -lssl -lcrypto -lssl -lcrypto -lgssapi_krb5 -llber -lldap -llber -lzstd -lbrotlidec -lz

2. 编译命令及链接错误

执行编译命令:gcc -o main main.c $(curl-config --static-libs),链接器报错如下:

root@74c0362a3530:/# gcc -o main main.c $(curl-config --static-libs)
/usr/bin/ld: cannot find -lnghttp2: No such file or directory
/usr/bin/ld: cannot find -lidn2: No such file or directory
/usr/bin/ld: cannot find -lrtmp: No such file or directory
/usr/bin/ld: cannot find -lssh: No such file or directory
/usr/bin/ld: cannot find -lssh: No such file or directory
/usr/bin/ld: cannot find -lpsl: No such file or directory
/usr/bin/ld: cannot find -lssl: No such file or directory
/usr/bin/ld: cannot find -lcrypto: No such file or directory
/usr/bin/ld: cannot find -lssl: No such file or directory
/usr/bin/ld: cannot find -lcrypto: No such file or directory
/usr/bin/ld: cannot find -lgssapi_krb5: No such file or directory
/usr/bin/ld: cannot find -llber: No such file or directory
/usr/bin/ld: cannot find -lldap: No such file or directory
/usr/bin/ld: cannot find -llber: No such file or directory
/usr/bin/ld: cannot find -lzstd: No such file or directory
/usr/bin/ld: cannot find -lbrotlidec: No such file or directory
/usr/bin/ld: cannot find -lz: No such file or directory

3. 验证系统中依赖库的存在性

通过ldd查看系统自带curl的动态依赖,确认所有报错的库均已存在且可正常解析:

root@74c0362a3530:/# ldd /usr/bin/curl
        linux-vdso.so.1 (0x0000ffffb1add000)
        libcurl.so.4 => /lib/aarch64-linux-gnu/libcurl.so.4 (0x0000ffffb1970000)
        libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000ffffb1930000)
        libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffffb1770000)
        /lib/ld-linux-aarch64.so.1 (0x0000ffffb1aa0000)
        libnghttp2.so.14 => /lib/aarch64-linux-gnu/libnghttp2.so.14 (0x0000ffffb1720000)
        libidn2.so.0 => /lib/aarch64-linux-gnu/libidn2.so.0 (0x0000ffffb16e0000)
        librtmp.so.1 => /lib/aarch64-linux-gnu/librtmp.so.1 (0x0000ffffb16a0000)
        libssh.so.4 => /lib/aarch64-linux-gnu/libssh.so.4 (0x0000ffffb1610000)
        libpsl.so.5 => /lib/aarch64-linux-gnu/libpsl.so.5 (0x0000ffffb15d0000)
        libssl.so.3 => /lib/aarch64-linux-gnu/libssl.so.3 (0x0000ffffb1500000)
        libcrypto.so.3 => /lib/aarch64-linux-gnu/libcrypto.so.3 (0x0000ffffb1080000)
        libgssapi_krb5.so.2 => /lib/aarch64-linux-gnu/libgssapi_krb5.so.2 (0x0000ffffb1010000)
        libldap.so.2 => /lib/aarch64-linux-gnu/libldap.so.2 (0x0000ffffb0f90000)
        liblber.so.2 => /lib/aarch64-linux-gnu/liblber.so.2 (0x0000ffffb0f60000)
        libzstd.so.1 => /lib/aarch64-linux-gnu/libzstd.so.1 (0x0000ffffb0ea0000)
        libbrotlidec.so.1 => /lib/aarch64-linux-gnu/libbrotlidec.so.1 (0x0000ffffb0e70000)
        libunistring.so.5 => /lib/aarch64-linux-gnu/libunistring.so.5 (0x0000ffffb0ca0000)
        libgnutls.so.30 => /lib/aarch64-linux-gnu/libgnutls.so.30 (0x0000ffffb0a80000)
        libhogweed.so.6 => /lib/aarch64-linux-gnu/libhogweed.so.6 (0x0000ffffb0a10000)
        libnettle.so.8 => /lib/aarch64-linux-gnu/libnettle.so.8 (0x0000ffffb09a0000)
        libgmp.so.10 => /lib/aarch64-linux-gnu/libgmp.so.10 (0x0000ffffb0900000)
        libkrb5.so.3 => /lib/aarch64-linux-gnu/libkrb5.so.3 (0x0000ffffb0820000)
        libk5crypto.so.3 => /lib/aarch64-linux-gnu/libk5crypto.so.3 (0x0000ffffb07d0000)
        libcom_err.so.2 => /lib/aarch64-linux-gnu/libcom_err.so.2 (0x0000ffffb07a0000)
        libkrb5support.so.0 => /lib/aarch64-linux-gnu/libkrb5support.so.0 (0x0000ffffb0770000)
        libsasl2.so.2 => /lib/aarch64-linux-gnu/libsasl2.so.2 (0x0000ffffb0730000)
        libbrotlicommon.so.1 => /lib/aarch64-linux-gnu/libbrotlicommon.so.1 (0x0000ffffb06f0000)
        libp11-kit.so.0 => /lib/aarch64-linux-gnu/libp11-kit.so.0 (0x0000ffffb0520000)
        libtasn1.so.6 => /lib/aarch64-linux-gnu/libtasn1.so.6 (0x0000ffffb04e0000)
        libkeyutils.so.1 => /lib/aarch64-linux-gnu/libkeyutils.so.1 (0x0000ffffb04b0000)
        libresolv.so.2 => /lib/aarch64-linux-gnu/libresolv.so.2 (0x0000ffffb0480000)
        libffi.so.8 => /lib/aarch64-linux-gnu/libffi.so.8 (0x0000ffffb0450000)

4. 动态链接可正常工作

使用动态链接参数编译可正常完成,生成的程序也能正确加载所有依赖:

root@74c0362a3530:/# curl-config --libs
-lcurl
root@74c0362a3530:/# cc -o main main.c $(curl-config --libs)
root@74c0362a3530:/# ldd main
        linux-vdso.so.1 (0x0000ffffa070d000)
        libcurl.so.4 => /lib/aarch64-linux-gnu/libcurl.so.4 (0x0000ffffa05d0000)
        libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffffa0410000)
        libnghttp2.so.14 => /lib/aarch64-linux-gnu/libnghttp2.so.14 (0x0000ffffa03c0000)
        libidn2.so.0 => /lib/aarch64-linux-gnu/libidn2.so.0 (0x0000ffffa0380000)
        librtmp.so.1 => /lib/aarch64-linux-gnu/librtmp.so.1 (0x0000ffffa0340000)
        libssh.so.4 => /lib/aarch64-linux-gnu/libssh.so.4 (0x0000ffffa02b0000)
        libpsl.so.5 => /lib/aarch64-linux-gnu/libpsl.so.5 (0x0000ffffa0270000)
        libssl.so.3 => /lib/aarch64-linux-gnu/libssl.so.3 (0x0000ffffa01a0000)
        libcrypto.so.3 => /lib/aarch64-linux-gnu/libcrypto.so.3 (0x0000ffff9fd20000)
        libgssapi_krb5.so.2 => /lib/aarch64-linux-gnu/libgssapi_krb5.so.2 (0x0000ffff9fcb0000)
        libldap.so.2 => /lib/aarch64-linux-gnu/libldap.so.2 (0x0000ffff9fc30000)
        liblber.so.2 => /lib/aarch64-linux-gnu/liblber.so.2 (0x0000ffff9fc00000)
        libzstd.so.1 => /lib/aarch64-linux-gnu/libzstd.so.1 (0x0000ffff9fb40000)
        libbrotlidec.so.1 => /lib/aarch64-linux-gnu/libbrotlidec.so.1 (0x0000ffff9fb10000)
        libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000ffff9fad0000)
        /lib/ld-linux-aarch64.so.1 (0x0000ffffa06d0000)
        libunistring.so.5 => /lib/aarch64-linux-gnu/libunistring.so.5 (0x0000ffff9f900000)
        libgnutls.so.30 => /lib/aarch64-linux-gnu/libgnutls.so.30 (0x0000ffff9f6e0000)
        libhogweed.so.6 => /lib/aarch64-linux-gnu/libhogweed.so.6 (0x0000ffff9f670000)
        libnettle.so.8 => /lib/aarch64-linux-gnu/libnettle.so.8 (0x0000ffff9f600000)
        libgmp.so.10 => /lib/aarch64-linux-gnu/libgmp.so.10 (0x0000ffff9f560000)
        libkrb5.so.3 => /lib/aarch64-linux-gnu/libkrb5.so.3 (0x0000ffff9f480000)
        libk5crypto.so.3 => /lib/aarch64-linux-gnu/libk5crypto.so.3 (0x0000ffff9f430000)
        libcom_err.so.2 => /lib/aarch64-linux-gnu/libcom_err.so.2 (0x0000ffff9f400000)
        libkrb5support.so.0 => /lib/aarch64-linux-gnu/libkrb5support.so.0 (0x0000ffff9f3d0000)
        libsasl2.so.2 => /lib/aarch64-linux-gnu/libsasl2.so.2 (0x0000ffff9f390000)
        libbrotlicommon.so.1 => /lib/aarch64-linux-gnu/libbrotlicommon.so.1 (0x0000ffff9f350000)
        libp11-kit.so.0 => /lib/aarch64-linux-gnu/libp11-kit.so.0 (0x0000ffff9f180000)
        libtasn1.so.6 => /lib/aarch64-linux-gnu/libtasn1.so.6 (0x0000ffff9f140000)
        libkeyutils.so.1 => /lib/aarch64-linux-gnu/libkeyutils.so.1 (0x0000ffff9f110000)
        libresolv.so.2 => /lib/aarch64-linux-gnu/libresolv.so.2 (0x0000ffff9f0e0000)
        libffi.so.8 => /lib/aarch64-linux-gnu/libffi.so.8 (0x0000ffff9f0b0000)
root@74c0362a3530:/#

5. 测试代码main.c

#include <curl/curl.h>

int main(void)
{
  CURL *curl = curl_easy_init();
  if(curl) {
    curl_easy_cleanup(curl);
  }

  return 0;
}

内容的提问来源于stack exchange,提问作者Philippe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:29:50