QSSH源码编译 with BOTAN2 动态 静态库编译
最近在做一个SSH相关的东西,最先想到的就是使用QSSH的库去开发。开发过程中,就遇到了一些想要静态库,动态库,以及依赖库的问题,现总结出来给大家闭坑,希望大家可以快速解决运到于此相关的问题。
BOTAN2: https://botan.randombit.net/releases/Botan-2.19.5.tar.xz
QSSH: https://github.com/sandsmark/QSsh.git
1,首先BOTAN2的编译就比较简单,只需要安装python就可以了
进入到源码目录执行命令:configure.py –cc=msvc –cpu=x86_32 – –debug-mode 默认是动态库。 编译静态库可加上 msvc-runtime=MTd –enable-static-library。 release模式需要改一下 MTd->MT 去掉-debug-mode.
如果还有其他操作可打开configure,py去找相关的命令
2.QSSH 的编译
1).编译动态库就只修改 qssh.pri,直接qmake ,编译即可
在其中加入BOTAN2的链接目录:
win32:CONFIG(debug,debug|release): {
LIBS += -LKaTeX parse error: Expected 'EOF', got '}' at position 34: …/debug -lbotan }̲ else:win32:CON…PWD/src/Botan2/lib -lbotan
}
INCLUDEPATH += $${PWD}/src/Botan2
2)静态库的编译
首先 修改qssh.pro
增加 CONFIG += static
这句前面用#号注释掉 #CONFIG += shared dll warn_on
其次修改和1)一样,增加BOTAN2的头文件目录,添加lib链接
有的也需要检查一下ssh_global.h中有无此语句,没有直接加上即可:
#ifdef _MSC_VER
// For static cmake building removing dll export/import
define QSSH_EXPORT
#else
#if defined(QTCSSH_LIBRARY)
define QSSH_EXPORT Q_DECL_EXPORT
#else
define QSSH_EXPORT Q_DECL_IMPORT
#endif
#endif
3。QSSH使用时调用SshConnection 的connectToHost后无反应,跟了一下发现是sshshakehand的时候keyexchange时,有一个验证没有通过,不过这个keyexchange不重要想改可以增加一下秘钥验证,不想改直接在sskexchange中屏蔽掉即可以使用。希望能帮到大家
const byte * const botanH = convertByteArray(m_h);
const Botan::byte * const botanSig = convertByteArray(reply.signatureBlob);
// PK_Verifier verifier(*sigKey, botanEmsaAlgoName(m_serverHostKeyAlgo));
// if (!verifier.verify_message(botanH, m_h.size(), botanSig, reply.signatureBlob.size())) {
// throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_KEY_EXCHANGE_FAILED,
// “Invalid signature in key exchange reply packet.”);
// }
暂无评论内容