c++ - Nextcloud 桌面客户端构建过程

标签 c++ qt cmake openssl nextcloud

大家好。

我使用了 Git 中关于如何构建 nextcloud 客户端的说明:https://github.com/nextcloud/desktop/wiki/How-to-compile-the-desktop-client

我想解释一下我做了什么以及尝试让 nextcloud 客户端运行:

  1. 我使用 Windows 10 创建了一个新的虚拟机,以便为我的测试获得干净的环境

安装Qt

  1. 我从 https://www.qt.io/download-qt-installer?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5 下载了 Qt 安装程序
  2. 在 Qt 安装向导中,我选择了 Qt 5.11.0 和 MinGW 4.9.1 进行安装。
  3. 我在 PATH 变量中添加了 C:\...\Qt\5.11.0

CMake

  1. 我从 https://cmake.org/download/ 下载了 Windows win64-x64 安装程序并安装了它
  2. 我在 PATH 变量中添加了 C:\...\Cmake\bin

Zlib

  1. 我从 https://github.com/maxirmx/Dist_zlib 下载了 64 位版本并解压缩文件夹
  2. 我在 PATH 变量中添加了 C:\...\Zlib\bin 和 C:\...\Zlib\lib

QtKeychain

  1. 我从 https://github.com/frankosterfeld/qtkeychain.git 克隆了存储库构建它并得到三个文件:qt5keychain.dll、qt5keychain.exp、qt5keychain.lib
  2. 我在 PATH 变量中添加了 C:\...\QtKeychain\Release ,其中包含这三个文件

OpenSSL

  1. https://github.com/nextcloud/desktop/wiki/System-requirements-for-compiling-the-desktop-client 提供的 OpenSLL 索引链接不提供任何 OpenSSL 1.1.x 版本。提供的最新版本是 1.0.2。所以我搜索了一下,然后从 https://slproweb.com/products/Win32OpenSSL.html 下载了 Win64 OpenSSL v1.1.0i。 .
  2. 我在 PATH 变量中添加了 C:\...\OpenSSL-Win64\bin,其中包含 openssl.exe、libcrypto-1_1-x64.dll、openssl.cfg 等

Git

  1. 我从 https://git-scm.com/downloads 下载了 Git 安装程序并在安装程序中不做任何更改并安装它

Visual Studio

  1. 我安装了带有 C++ 包和以下附加组件的 VS 2017 社区版: 用于 CMake 的 Visual C++ 工具 适用于 UWP C++ 的 Windows 10 SDK (不确定是否就这些)

创建 nextcloud 项目文件

  1. 在 Git Bash 中,我导航到/c/.../nextcloud/desktop/
  2. 我跑: 'mkdir 构建'
  3. 导航到/c/.../nextcloud/desktop/cmake\并运行:
    cmake -G "Visual Studio 15 2017 Win64".. -DCMAKE_INSTALL_PREFIX=/c/.../nextcloud/desktop/build/-DQTKEYCHAIN_INCLUDE_DIR=/c/QTKeychain/Release/-DCMAKE_BUILD_TYPE=Debug -DNO_SHIBBOLETH=1
  4. 完成(没有错误)

构建 nextcloud 客户端

  1. 在/c/.../nextcloud/desktop/cmake 我运行:
    cmake --build 。 --config 调试 --target nextcloud

  2. 收到文件 clientsideencryption.cpp 和 httpcredentials.cpp 找不到 keychain.h 和 qkeychain_export.h 的错误,所以我将这两个文件(和 keychain.cpp)从 QtKeychain 存储库复制到文件所在的位置在 desktop/src/libsync 下,错误不再出现

  3. 再次运行 19. 现在我遇到了 50 多个错误,例如:

    clientsideencryption.obj : error LNK2019: Unresolved external symbol "BIO_read" referenced in function ""class QByteArray __cdecl OCC::'anonymous namespace'::BIO2ByteArray(struct bio_st *)" (?BIO2ByteArray@?A0xd4adced4@OCC@@ya?AVQByteArray@@PEAUbio_st@@@z)". [C:\Nextcloud_64\desktop\cmake\src\libsync\nextcloudsync.vcxproj]

    clientsideencryption.obj : error LNK2019: Unresolved external symbol "BIO_write" referenced in function ""class QByteArray __cdecl OCC::EncryptionHelper::privateKeyToPem(class QSslKey)" (?privateKeyToPem@EncryptionHelper@OCC@@ya?AVQByteArray@@VQSslKey@@@z)". [C:\Nextcloud_64\desktop\cmake\src\libsync\nextcloudsync.vcxproj]

我不确定这个问题是来自 OpenSLL 还是 QtKeychain。我是否错过了复制或以某种方式连接?

任何人都可以判断帽子是否正确我正在做的事情以及是否有任何方法可以构建客户端?

非常感谢您

最佳答案

GitHub 上的一个问题让我想到了这里的问题。如果有人尝试相同,我想添加一些提示:

我们现在有一个包含 Windows 构建脚本的官方存储库,用于创建每日构建以及我们的发布构建:

https://github.com/nextcloud/client-building/

如果您不想为 Windows 构建,您可能会在那里获得一些有用的提示 ;-)

关于 Windows: 好提示@mn_dc466 :) 首次成功构建客户端后,只需打开构建文件夹中的 Visual Studio 解决方案文件,即可使用您的修改进行重建和调试,而无需完全重建整个项目。

关于c++ - Nextcloud 桌面客户端构建过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51949473/

相关文章:

c++ - 使用排序算法 C++

c++ - Rexster/蓝图、Neo4j 和 C++

c++ - 如何循环继承自 boost::any 中包含的 std::vector 的类

c++ - QT 在 StackView 中排列组件

android - 如何在没有可写和可执行段的情况下为Android O编译.so?如何设置特定的ELF权限?

c++ - 多态中的引用和指针

c++ - Qt串口读取字符串不好

python - 将新小部件设置为 QScrollArea 时 PySide 应用程序崩溃

c++ - LNK2019 当包含 asio header 时,使用 cmake 生成的解决方案

c++ - 根据 Qt 版本动态使用 QGLWidget 或 QOpenGLWidget