Проблема libgit2 cmake с использованием libssh2: LIBSSH2 не найдена. Установите CMAKE_PREFIX_PATH, если он установлен за пределами пути поиска по умолчанию.

Я пытаюсь собрать исходный код libgit2 в Windows 8 с помощью командной строки Visual Studio 2010. Я также успешно скомпилировал и установил исходный код libssh2 на машину.

путь установки libssh2: C:\Program Files (x86)\libssh2

Всякий раз, когда я выполняю команду cmake .. для libgit2 CMake.list, я получаю вывод, что LIBSSH2 не найден. Задайте CMAKE_PREFIX_PATH, если он установлен за пределами пути поиска по умолчанию.

Я пробовал несколько предложений, которые также доступны в stackoverflow, но не повезло. Также я попытался поместить скомпилированную папку libssh2, включая подкаталоги (include, lib и share) в папку cmake/Modules libgit2.

Кто-нибудь подскажет, как правильно настроить внешнюю зависимость в CMakelist.txt для включения модуля libssh2 в libgit2?

Заранее спасибо!


person Monty    schedule 09.11.2015    source источник
comment
Где находится .pc файл для libssh2? (Возможно, это где-то по установленному пути этой библиотеки). Попробуйте установить CMAKE_PREFIX_PATH в каталог, где находится этот файл: cmake -DCMAKE_PREFIX_PATH=<dir-with-pc-file> <source-dir>.   -  person Tsyvarev    schedule 09.11.2015
comment
@Tsyvarev: Да, файл .pc доступен в каталоге C:\Program Files (x86)\libssh2\lib\pkgconfig, я также установил CMAKE_PREFIX_PATH, но это не влияет.....   -  person Monty    schedule 09.11.2015
comment
Хм, судя по pkg_check_modules реализации, lib/pkgconfig суффикс добавляется автоматически. Не могли бы вы вместо этого установить для CMAKE_PREFIX_PATH значение C:\Program Files (x86)\libssh2?   -  person Tsyvarev    schedule 09.11.2015
comment
@Tsyvarev: пытался изменить и проверить, все та же ошибка.....!   -  person Monty    schedule 09.11.2015
comment
Выглядит странно. На самом деле вам нужно настроить pkg-config инструмент, чтобы найти вашу libssh2 библиотеку. Единственный способ, который я знаю для достижения, это установка переменной окружения PKG_CONFIG_PATH. Вы можете поиграть с ним, назначив ему разные подпути .pc файла. Как только вы это сделаете, конфигурация libgit2 должна быть выполнена успешно при запуске из той же среды.   -  person Tsyvarev    schedule 09.11.2015
comment
Какую версию CMake вы используете? CMAKE_PREFIX_PATH не оценивается со старой версией CMake и pkg-config.   -  person usr1234567    schedule 09.11.2015


Ответы (1)


Сценарий CMake использует pkg-config для поиска зависимостей (с несколькими исключениями для конкретных ОС для библиотек, поставляемых с базовой установкой), поэтому, если у вас есть libssh2 не в том месте, где будет выглядеть ваш pkg-config, вам придется установить PKG_CONFIG_PATH.

Обратите внимание: если вы собрали libssh2 в среде mingw, он может не работать с libgit2, созданным в MSVC.

В выпусках master и 0.22 вы также можете встроить libssh2 в dll libgit2, установив EMBED_SSH_PATH на последний выпуск libssh2, который может использовать криптобиблиотеки Windows вместо OpenSSL. Но если вы можете создать dll libssh2, это предпочтительный вариант.

person Carlos Martín Nieto    schedule 12.11.2015
comment
не могли бы вы подсказать, где я могу получить исходный код версии 0.22? У меня есть ветка pull master, но ее версия выше 0.22. - person Monty; 18.11.2015
comment
Если вы клонировали, у вас уже есть версия, проверьте тег v0.22.3 или перейдите на страницу проекта GitHub, нажмите «Выпуски» и выберите нужную версию. - person Carlos Martín Nieto; 18.11.2015
comment
Спасибо за предложение, теперь я могу получить версию 0.22. Я просто компилирую его, он также говорит, что протокол не поддерживается. Теперь я использую простой URL-адрес репозитория Http вместо SSH. Мой URL-адрес репозитория похож на http://subdomain.domain:82/abc.git, но всякий раз, когда Я использую метод git_clone, он выдает ошибку Ошибка запроса с кодом состояния: 401. Но когда я пытаюсь использовать тот же URL-адрес на Git Bash, он успешно клонируется. Я использую метод git_cred_userpass_plaintext_new для установки учетных данных. Не могли бы вы предложить мне, что я делаю неправильно? - person Monty; 20.11.2015
comment
любое предложение по моему комментарию выше? - person Monty; 21.11.2015
comment
Это означает, что сервер не принял учетные данные. Дважды проверьте имя пользователя и пароль, а также проверьте, нужен ли вам конкретный токен для доступа через Git, а не через веб-страницу. - person Carlos Martín Nieto; 21.11.2015
comment
Тогда либо вы не устанавливаете его в параметрах, которые вы передаете клонированию, либо где-то может быть ошибка, но это старая версия libgit2, и, не видя вашего кода, невозможно узнать, что происходит. Это также полностью отличается от предмета вопроса. - person Carlos Martín Nieto; 21.11.2015
comment
Я устанавливаю git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT; clone_opts.fetch_opts.callbacks.credentials = &cred_acquire_cb; который работает для репозитория битбакет. У меня есть репозиторий настроек на моем сервере, может быть проблема с настройкой моего сервера, потому что я не получаю обратный вызов со стороны сервера..... Также я сделаю еще один пост по этой проблеме с новой строкой темы. Спасибо за вашу помощь. - person Monty; 21.11.2015