无法静态链接libcurl和动态链接其他库

问题描述 投票:0回答:1

我正在尝试使用

curl-config --static-libs
,它应该静态链接 libcurl 但动态链接 libcurl 自己的所有依赖项。

这一切都在当前的 ubuntu Nobel 容器中

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
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

我的猜测是链接器尝试静态链接这些库,因为如果我们查看

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)

动态链接有效

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:/#

这些是

main.c

的内容
#include <curl/curl.h>

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

  return 0;
}
c curl gcc ld
1个回答
0
投票

我缺少共享库的

.so
符号链接,由于某种原因,它仅随补充的
-dev
包一起提供: 例如:

root@74c0362a3530:/# dpkg-query -S /usr/lib/aarch64-linux-gnu/libbrotlidec.*
libbrotli-dev:arm64: /usr/lib/aarch64-linux-gnu/libbrotlidec.a
libbrotli-dev:arm64: /usr/lib/aarch64-linux-gnu/libbrotlidec.so
libbrotli1:arm64: /usr/lib/aarch64-linux-gnu/libbrotlidec.so.1
libbrotli1:arm64: /usr/lib/aarch64-linux-gnu/libbrotlidec.so.1.1.0
root@74c0362a3530:/#
© www.soinside.com 2019 - 2024. All rights reserved.