Можно ли собрать 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 шт):
dll подгружаются 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.