Как правильно подойти к вопросу: какой самый стабильный и лучший вариант собрать QUIC для curl [cross-compilation]?

Ссылка скопирована
1 ответ

По вводным: пробую собрать с максимальными "плюшками"

Spoiler

По вводным: export T=x86_64-w64-mingw32

По вводным: export GSASL_DIR=/root/curl-build/winlibs/gsasl-mingw

По вводным: nGHTTP3_DIR=/root/curl-build/winlibs/nghttp3-1.12.0-mingw

По вводным: export CPPFLAGS="-I${NGHTTP3_DIR}/include -I${GSASL_DIR}/include"
По вводным: export LDFLAGS="-L${NGHTTP3_DIR}/lib -L${GSASL_DIR}/lib -lgsasl"
Export LIBS="-lgsasl"

По вводным: export PKG_CONFIG_PATH="/root/curl-build/winlibs/libpsl-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/libidn2-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/nghttp3-1.12.0-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/libunistring-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/libiconv-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/openssl-quictls-mingw/lib64/pkgconfig:\
По вводным: /root/curl-build/winlibs/zlib-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/ngtcp2-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/brotli-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/zstd-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/nghttp2-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/libgsasl-mingw/lib/pkgconfig:\
По вводным: /root/curl-build/winlibs/libssh2-mingw/lib/pkgconfig"
По вводным: cC=$T-gcc AR=$T-ar RANLIB=$T-ranlib STRIP=$T-strip \
По вводным:../curl-8.16.0/configure --host=$T --build=$(uname -m)-ПК-linux-gnu \
По вводным: --prefix=/root/curl-build/winlibs/curl-mingw-latest \
По вводным: --with-libgsasl=/root/curl-build/winlibs/gsasl-mingw \
По вводным: --with-zlib=/root/curl-build/winlibs/zlib-mingw \
По вводным: --cache-file=config.cache \
По вводным: --with-openssl=/root/curl-build/winlibs/openssl-quictls-mingw \
По вводным: --with-ca-bundle="cacert.crt" \
--with-ca-fallback \
По вводным: --with-ca-embed="/root/curl-8.16.0/curl-ca-bundle.crt" \
По вводным: --with-nghttp3=/root/curl-build/winlibs/nghttp3-1.12.0-mingw \
По вводным: --with-nghttp2=/root/curl-build/winlibs/nghttp2-mingw \
По вводным: --with-ngtcp2=/root/curl-build/winlibs/ngtcp2-mingw \
По вводным: --with-brotli=/root/curl-build/winlibs/brotli-mingw \
По вводным: --with-zstd=/root/curl-build/winlibs/zstd-mingw \
По вводным: --with-libidn2=/root/curl-build/winlibs/libidn2-mingw \
По вводным: --with-libpsl=/root/curl-build/winlibs/libpsl-mingw \
По вводным: --with-libssh2=/root/curl-build/winlibs/libssh2-mingw \
По вводным: --with-openssl-quic=/root/curl-build/winlibs/openssl-quictls-mingw \
--enable-http3 \
--enable-alt-svc \
--enable-headers-api \
--enable-hsts \
--enable-websockets \
--enable-ipv6 \
По вводным: --enable-threaded-resolver \
--enable-httpsrr \
--enable-sspi \
--enable-ssls-export \
--enable-shared

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ирина WP Ответ

Для curl с QUIC самый стабильный путь сейчас — не пытаться собрать “всё и сразу”, а выбрать одну TLS/QUIC-связку и довести её до воспроизводимой сборки. Для Windows cross-compilation через mingw обычно меньше боли с ngtcp2 + nghttp3 + OpenSSL/quictls или с готовыми vcpkg/llvm-mingw рецептами, чем с ручным смешиванием библиотек.

Важно: HTTP/3 в curl требует согласованную тройку:

curl
nghttp3
ngtcp2
TLS backend с QUIC support

curl nghttp3 ngtcp2 TLS backend с QUIC support

Проверьте, что pkg-config видит именно mingw-библиотеки, а не linux-host версии:

export PKG_CONFIG_LIBDIR=/root/curl-build/winlibs/lib/pkgconfig
pkg-config --libs ngtcp2
pkg-config --libs nghttp3

export PKG_CONFIG_LIBDIR=/root/curl-build/winlibs/lib/pkgconfig pkg-config --libs ngtcp2 pkg-config --libs nghttp3

Не смешивайте LDFLAGS и LIBS наугад. Если зависимость нужна через pkg-config, лучше чтобы она приходила оттуда. Иначе легко получить ситуацию, где headers от одной сборки, а lib — от другой.

Базовый порядок сборки:

  1. собрать TLS backend с QUIC;
  2. собрать nghttp3;
  3. собрать ngtcp2 против этого TLS;
  4. собрать curl с --with-ngtcp2 и --with-nghttp3;
  5. проверить curl -V.

В результате curl -V должен показать HTTP3:

Features: ... HTTP3 ...
ngtcp2
nghttp3

Features: ... HTTP3 ... ngtcp2 nghttp3

Итог: выберите одну поддерживаемую связку и фиксируйте версии. Для cross-compilation критично, чтобы pkg-config, include и lib смотрели в один mingw-prefix. “Максимум плюшек” лучше добавлять после того, как минимальная HTTP/3-сборка стабильно работает.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно