FreeRDP在Windows上编译详细过程
1. 前言
FreeRDP是远程桌面协议(RDP)的一个开源实现版本,对于我们的学习和使用都有很大的帮助作用。最近由于需要用户RDP协议的windows客户端,所以打算在Windows上编译下FredRDP,因为之前都是在Linxu开发程序居多,所以也借此机会记录一下windows编译开源软件的一个过程,用于自我学习。
2. 编译前的准备工作
2.1. Visual Studio 2019
Visual Studio是windows平台开发一个常用的开发IDE工具,我们本次编译的主要开发工具就是Visual Studio,这次使用的是2019版本,其他最新版本的使用也是大同小异的。
2.2. CMake
本次编译过程需要使用到cmake程序,用于生成Visual Studio 的开发工程文件,本次编译使用的是 cmake 3.27.1版本,下载地址为:https://cmake.org/download/,我们可以在该地址下找到对应的windows平台安装包。
2.3. libusb
libusb是编译FreeRDP时会用到的头文件和lib库文件,本次编译使用的是v1.0.24版本,该版本的文件夹下会根据不同的VS版本,提供不同的库文件,对我们比较友好。下载地址:https://github.com/libusb/libusb/releases/tag/v1.0.24,下载 libusb-1.0.24.7z 文件即可。
2.4. openssl
openssl也是我们编译需要使用的库,下载地址:https://slproweb.com/products/Win32OpenSSL.html,我们选择Win64 v1.1.1版本,所以我下载的版本为:Win64OpenSSL-1_1_1v.msi。
下载后,直接安装即可,安装后需要在环境变量中新增系统变量,以我的本地配置为例,需要新增如下变量:
OPENSSL_INCLUDE_DIR = D:\Program Files\OpenSSL-Win64\include OPENSSL_ROOT_DIR = D:\Program Files\OpenSSL-Win64 |
2.5. FreeRDP源码
我使用的是FreeRDP最新版本的源码,下载地址为:https://github.com/FreeRDP/FreeRDP
3. 编译zlib库
因为最新的FreeRDP把zlib库当做必选项,所以我们需要zlib库的头文件和库文件。由于没有找到编译好的库文件,所以我们需要先编译一下zlib库。
3.1. zlib库下载
下载地址:https://github.com/madler/zlib/releases,我们使用最新的zlib 1.3版本。
3.2. 编译zlib库
采用cmake生成VS 工程文件,编译过程如下:
首先,配置源代码路径和build路径。
其次,点击 Configure 按钮,开始生成配置:
最后,点击 Generate 生成工程文件,然后点击 Open Project 打开工程文件。
3.3. 安装zlib库
在上述点击 Open Project 后,会自动打开VS2019,找到INSTALL项目。
首先,右键选择:设为启动项目。
其次,右键点击生成。
生成成功后,详情显示如下:
目前是生成在C:\Program Files\zlib\路径下,如果是其他路径,则可能需要加入到环境变量中,大家视具体情况而定。
4. 使用CMake生成FreeRDP的VS解决方案
4.1. 配置源码和build路径
这一步,我们需要通过CMake生成VS解决方案,首先打开CMake软件,配置FreeRDP源码和build路径。FreeRDP源码就选择本地的源码路径,build路径则放到源码路径下,后续会在该目录下生成工程文件。
点击 Configure 按钮,开始生成配置:
4.2. 配置LIBUSB路径
首先,我们先把下载的libusb-1.0.24拷贝到FreeRDP目录下,其中include目录和VS2019是我们要用到的目录。
其次,搜索LIBUSB,找到对应的选项,进行配置:
配置完成后,配置值如下:
4.3. 处理配置错误
4.3.1. zlib库找不到错误:
第一次生成配置,可能会有很多错误,比如说下面这个错误,就是没有ZLIB库导致的错误,我们按照第三章的步骤生成zlib库后,就不会有该错误了。
4.3.2. openssl库未配置环境变量错误:
安装了openssl后,如果未配置环境变量,就会出现如下的错误,解决办法就是配置环境变量,新增如下系统变量(以我自己的配置为例):
OPENSSL_INCLUDE_DIR = D:\Program Files\OpenSSL-Win64\include OPENSSL_ROOT_DIR = D:\Program Files\OpenSSL-Win64 |
配置好后,需要先关闭CMake,再重新打开,主要是为了重新加载环境变量,然后再次点击 Configure 按钮即可。
4.3.3. 去掉不需要的模块:
除此之外,还会有一些其他的错误
该错误是找不到FFmpeg,但是实际上我们用不到FFmpeg 模块,那么我们就可以在编译选项中去掉,比如FFMPEG模块,我们就可以去掉,搜索WITH_FFMPEG,去掉 Value 的勾选。
类似的模块还有:WITH_SWSCALE、WITH_AAD以及WITH_CLIENT_SDL(这个选项可以不去掉),都需要把勾选去掉。我们只需要去掉一个模块后,再次点击 Configure ,如果发现还有不需要的模块,搜索去掉即可。
4.4. 生成工程文件以及配置编辑过程
如果 Configure 没有错误,则点击 Generate 进行生成,然后点击 Open Project 打开工程文件。
4.5. 配置工程文件
打开vs工程文件后,首先,需要在工程文件中添加对libusb的依赖项,打开工程文件,在 Client->Common下,找到freerdp-client项目,右键选择属性,在属性->链接器->输入->附加依赖项 中增加如下配置即可。
我们可以直接增加 D:\work\windows\FreeRDP\libusb-1.0.24\VS2019\MS64\dll\libusb-1.0.lib 这个配置,或者把D:\work\windows\FreeRDP\libusb-1.0.24\VS2019\MS64\dll\libusb-1.0.lib 拷贝到 build\Debug目录下,然后增加 ..\..\Debug\libusb-1.0.lib 这个配置也可以。
如果在编译过程中遇到其他的找不到符号等错误,只需要找到对应的静态库进行链接即可。
4.6. 编译&运行程序
最后找到wfreerdp-client项目, 右键选择生成即可。在build\Debug目录下, 会生成我们需要的程序,如果实际需要运行程序,可能还需要把libusb-1.0.dll和zib的dll库 zlibd.dll 拷贝到Debug目录下。最终,Debug目录下的wfreerdp.exe就是我们需要的程序。
5. 结语
以上就是windows下编译FreeRDP的所有步骤,希望可以给大家带来一些帮助。后续会继续介绍其他FreeRDP的功能和特性。