Использование Cmake для сборки ssh.dll с помощью Visual Studio 2017

Я новичок в C++ и пытаюсь собрать ssh.dll в 32-разрядной версии Windows, используя Visual Studio 2017 и cmake. Я загрузил последнюю версию libssh и попытался собрать ssh.dll из исходного кода, используя cmake после настройки и генерации в соответствии с рекомендуемыми шагами.

После создания я открыл файл решения libssh с помощью Visual Studio 2017 и собрал его, но при компиляции он выдал несколько ошибок отсутствующих библиотек, которые я решил, добавив эти библиотеки в путь VC.

После добавления этих библиотек я начал выдавать около 600 ошибок компиляции, как показано ниже, связанных с синтаксисом (но синтаксис выглядит правильно в этих файлах библиотек).

Есть ли способ или предложение, с помощью которого я могу успешно решить их и создать файл .dll?

Ниже приведены некоторые из этих ошибок:

Severity    Code    Description Project File    Line    Suppression State
Error   C2146   syntax error: missing ')' before identifier 'session'   ssh_shared  c:\apps\mvs15\vc\tools\msvc\14.10.25017\include\libssh\priv.h   196 
Error   C2061   syntax error: identifier 'channel'  ssh_shared  c:\apps\mvs15\vc\tools\msvc\14.10.25017\include\libssh\callbacks.h  64  
Error   C2059   syntax error: ';'   ssh_shared  c:\apps\mvs15\vc\tools\msvc\14.10.25017\include\libssh\callbacks.h  64  
Error   C2146   syntax error: missing ')' before identifier 'fd'    ssh_shared  c:\apps\mvs15\vc\tools\msvc\14.10.25017\include\libssh\libssh.h 656 
Error   C2059   syntax error: ')'   ssh_shared  c:\apps\mvs15\vc\tools\msvc\14.10.25017\include\libssh\libssh.h 597 
Error   C2081   'socket_t': name in formal parameter list illegal   ssh_shared  c:\apps\MVS15\VC\Tools\MSVC\14.10.25017\include\libssh\poll.h   135 
Error   C2059   syntax error: '}'   ssh_shared  c:\apps\MVS15\VC\Tools\MSVC\14.10.25017\include\libssh\session.h    203 
Error   C2146   syntax error: missing ')' before identifier 'fd'    ssh_shared  c:\apps\MVS15\VC\Tools\MSVC\14.10.25017\include\libssh\socket.h 36  
Error   C2059   syntax error: ';'   ssh_shared  c:\apps\mvs15\vc\tools\msvc\14.10.25017\include\libssh\callbacks.h  64  
Error   C2037   left of 'iqmp' specifies undefined struct/union 'rsa_st'    ssh_shared  C:\apps\vcpkg\downloads\libssh-0.7.6.tar\libssh-0.7.6\src\libcrypto-compat.c    77  
Error   C2037   left of 'dmq1' specifies undefined struct/union 'rsa_st'    ssh_shared  C:\apps\vcpkg\downloads\libssh-0.7.6.tar\libssh-0.7.6\src\libcrypto-compat.c    76  

Чтобы решить эту проблему, я также попытался заменить сомнительные файлы библиотеки другой версией этих файлов библиотеки, но безуспешно. Что я могу попробовать дальше?


person CodeHunter    schedule 31.01.2019    source источник
comment
Вы установили зависимые библиотеки zlib, openssl?   -  person Damian    schedule 31.01.2019
comment
Да. На самом деле я установил библиотеки zlib и openssl перед созданием решения с помощью cmake-gui.exe. Но я не уверен, почему мне пришлось вручную включать библиотеки в мою папку VC, как для файлов заголовков openssl, так и для libssh.   -  person CodeHunter    schedule 31.01.2019
comment
Как вы их установили? В Windows нет встроенного соглашения по установке библиотек c/c++.   -  person user7860670    schedule 31.01.2019
comment
@VTT Итак, я скачал исходный код libssh и установил zlib, openssl и cmake. Запустил cmake-gui.exe, указав его на каталог src загруженного libssh, настроил его и создал сборку. После этого я мог видеть файл libssh_solution в моей папке сборки, который открылся в Visual Studio 2017 для компиляции. Изначально отсутствовали библиотеки, что вызывало ошибки, связанные с отсутствующей библиотекой. Это были 'libssh, 'openssl' zlib и config.h. Я добавил их вручную в свой путь VC, после чего при повторной компиляции я начал получать вышеуказанные ошибки, о которых я упоминал в ОП.   -  person CodeHunter    schedule 31.01.2019


Ответы (1)


Я просто сделал клон git и успешно его построил.

Вот как я это сделал.

vcpkg install zlib:x64-windows openssh:x64-windows 
in the cloned source code
mkdir build
cd build
cmake .. -DCMAKE_GENERATOR_PLATFORM=x64 "-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"

Откройте файл решения в Visual Studio 2017, и он будет успешно собран.

2>   Creating library ssh.lib 
2>ssh_shared.vcxproj -> ....\build\src\Debug\ssh.dll
========== Build: 7 succeeded, 0 failed, 0 up-to-date, 4 skipped ==========

Если вы хотите построить для 32-битной архитектуры

vcpkg install zlib openssh
in the cloned source code
mkdir build
cd build
cmake .. "-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"
person Damian    schedule 31.01.2019
comment
Спасибо, Дармиан. Позвольте мне попробовать. - person CodeHunter; 31.01.2019
comment
Будет ли вместо этого vcpkg устанавливать openssl:x64-windows? Пожалуйста, дай мне знать. - person CodeHunter; 31.01.2019
comment
Вам нужно добавить :x64-windows, если вы хотите построить для 64-битной архитектуры. Если это было полезно, отметьте мой ответ как правильный. Ваше здоровье! - person Damian; 01.02.2019