如何在Windows上使用嵌入式libssh2构建libgit2

时间:2020-04-14 12:56:23

标签: windows visual-c++ libgit2 libssh2

首先,我们使用libssh2WinCNG后端构建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构建过程。据我了解,先前构建的结果及其所有子文件夹(例如includebin所在的文件夹应该是正确的路径,因此使用%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的{​​{1}}吗?

1 个答案:

答案 0 :(得分:1)

使用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作为后端,使用嵌入式SSH在libssh2目录中创建以下文件(libssh2_config.h):

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

我认为这意味着它已经是嵌入式安装的默认后端。

相关问题