Как собрать libgit2 со встроенным libssh2 на Windows - PullRequest
0 голосов
/ 14 апреля 2020

Сначала мы строим libssh2 с WinCNG бэкендом, используя msvc:

cmake . -DCRYPTO_BACKEND=WinCNG -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=%LIBSSH2%
cmake --build . --target install

libgit2 документы говорят, что все, что нам нужно сделать, это установить DEMBED_SSH_PATH, хотя это не удается указание, что его установить. Может быть, это так очевидно, что кажется неуместным. Однако: я не C парень и не имею понятия о процессе сборки cmake. Из того, что я понимаю, папка, в которой находится результат предыдущей сборки со всеми ее подпапками, такими как include и bin, должна иметь правильный путь, поэтому использование %LIBSSH2% должно подойти.

Когда, наконец, попытка построить libgit2 с запущенным

cmake . -DBUILD_CLAR=OFF -DCMAKE_BUILD_TYPE=Release -DEMBED_SSH_PATH=%LIBSSH2% -DCMAKE_INSTALL_PREFIX="%LIBGIT2%"
cmake --build . --target install

Это не удастся, потому что он не может найти ссылки на заголовочные файлы / двоичные файлы. Мы видим что-то вроде:

error LNK2019: unresolved external symbol libssh2_init referenced in function

Я уже пытался заменить обратные слэши путей \ на обычные слэши /, так как это кажется распространенной проблемой. Я также попытался явно установить

set CMAKE_INCLUDE_PATH=%LIBSSH2%/include
set CMAKE_LIBRARY_PATH=%LIBSSH2%/lib

, оба сбоев с одинаковым результатом.

Может кто-нибудь предоставить воспроизводимый способ компиляции libgit2 со встроенным libssh2?

1 Ответ

1 голос
/ 15 апреля 2020

Использование EMBED_SSH_PATH означает, что исходники libssh2 будут скомпилированы одновременно с libgit2s. Это означает, что на самом деле вам вообще не нужно компилировать libssh2.

Мне удалось его успешно скомпилировать, загрузив исходный код для libssh2 и libgit2, а затем выполнив следующие команды:

cd libgit2
mkdir build
cd build
cmake .. -DBUILD_CLAR=OFF -DCMAKE_BUILD_TYPE=Release -DEMBED_SSH_PATH="C:/path-to-ssh/libssh2" -DCMAKE_INSTALL_PREFIX="%LIBGIT2%"
cmake --build . --target install

Внутренне, он ищет все файлы, которые соответствуют ${EMBED_SSH_PATH}/src/*.c, если установлено EMBED_SSH_PATH.

Что касается использования WinCNG в качестве бэкэнда, использование встроенного S SH создает этот файл (libssh2_config.h ) в каталоге libssh2:

#define HAVE_WINCNG
#define LIBSSH2_WINCNG
#include "../win32/libssh2_config.h"

Я предполагаю, что это означает, что это уже бэкэнд по умолчанию для встроенной установки.

...