Можно ли собрать curl так, чтобы DLL-дополнения лежали в подпапке (например, addons)?

Собираю curl под Windows в Debian через кросс-компиляцию (x86_64-w64-mingw32). Сборка проходит нормально, но хотелось бы, чтобы в итоге все дополнительные библиотеки (.dll от OpenSSL, nghttp2, zlib, и т.д.) лежали не рядом с curl.exe, а в отдельной подпапке, например addons/.

Вот текущая команда сборки:

    export T=x86_64-w64-mingw32

PKG_CONFIG_PATH="/root/winlibs/libpsl-mingw/lib/pkgconfig:\
/root/winlibs/libidn2-mingw/lib/pkgconfig:\
/root/winlibs/libunistring-mingw/lib/pkgconfig:\
/root/winlibs/libiconv-mingw/lib/pkgconfig:\
/root/winlibs/openssl-mingw/lib/pkgconfig:\
/root/winlibs/zlib-mingw/lib/pkgconfig:\
/root/winlibs/brotli-mingw/lib/pkgconfig:\
/root/winlibs/zstd-mingw/lib/pkgconfig:\
/root/winlibs/nghttp2-mingw/lib/pkgconfig:\
/root/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)-pc-linux-gnu \
  --prefix=/root/winlibs/curl-mingw-latest \
  --with-zlib=/root/winlibs/zlib-mingw \
  --with-ssl=/root/winlibs/openssl-mingw \
  --with-ca-bundle="addons/cacert.pem" \
  --with-nghttp2=/root/winlibs/nghttp2-mingw \
  --with-brotli=/root/winlibs/brotli-mingw \
  --with-zstd=/root/winlibs/zstd-mingw \
  --with-libidn2=/root/winlibs/libidn2-mingw \
  --with-libpsl=/root/winlibs/libpsl-mingw \
  --with-libssh2=/root/winlibs/libssh2-mingw \
  --enable-alt-svc \
  --enable-headers-api \
  --enable-hsts \
  --enable-websockets \
  --enable-ipv6 \
  --enable-threaded-resolver \
  --enable-shared

Хотелось бы, чтобы на выходе в Windows структура выглядела так:

curl.exe
addons/
 libssl-3.dll
 libcrypto-3.dll
 libzstd.dll
 ...
 cacert.pem

а не всё свалено в одну директорию.

Можно ли это как-то задать на этапе configure или make install, чтобы curl видел зависимости в подпапке?


Ответы (2 шт):

Автор решения: LolPopGames

dll подгружаются 2 способами:

  1. Либо они лежат в той же директории, что и исполняемый файл с зависимостью
  2. Либо директория библиотеки лежит в PATH

Если вы работаете msys2, то можете добавить в .bashrc/.zshrc следующее:

export PATH="$PATH:/путь/до/директории/библиотеки"
# либо можно export PATH="/ваш/путь:$PATH"

Если вам нужно везде и постоянно, то выполните следующее:

Нажмите WIN+R, и введите:

SystemPropertiesAdvanced

И нажмите Переменные среды...

В меню системных переменных найдите Path, нажмите Изменить..., в конец переменной добавьте:

;C:\путь\до\директории

Рекомендовано использовать именно \, а не /

Теперь curl должен запускаться коректно

→ Ссылка
Автор решения: Простой Человек

Нельзя, ответ разработчика

The loading of these DLLs is done by Windows, not by curl or libcurl. Also on Windows there is no concept of an rpath; the DLLs need to be in the runtime PATH to make Windows fine them. Adding addons to the PATH should solve this, but this can't be hard-coded into curl.exe.

→ Ссылка