网上的windows编译freerdp的教程大多需要繁琐的手工配置,而且配置支持的freerdp的特性特别有限。本文介绍了一种使用vcpkg自动管理和编译freerdp依赖的第三方库的快速编译wfreerdp的方法,编译链接方式为mt-static没有过多的DLL依赖。
编译环境
OS:win2022 或者 win10
msvc: vs2017 v141
Ninja: 1.11.1
cmake: 3.27.1
git:2.41.0
vcpkg:github.com/microsoft/v…
使用choco安装编译环境
1、安装choco
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
2、安装 vs2017
choco install -y VisualStudio2017Community # 或者visualstudio2017buildtools
3、安装Ninja
choco install -y ninja
4、安装cmake
choco install -y cmake.install --installargs '"ADD_CMAKE_TO_PATH=System"'
5、安装git
choco install -y git
6、安装vcpkg
这里一定要从git clone,因为vcpkg.json里面用到了override指定了依赖库的版本
mkdir workspace
cd workspace
git clone https://github.com/microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat
编译freerdp
1、拉取代码
git clone https://github.com/FreeRDP/FreeRDP.git -b 2.11.7
2、编译参数配置,使用CMakePresets.json文件(FreeRDP项目根目录下新建)
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 15,
"patch": 0
},
"configurePresets": [
{
"name": "windows-default",
"hidden": true,
"binaryDir": "${sourceDir}/cmake-build-${presetName}",
"generator": "Ninja",
"toolset": {
"value": "v141",
"strategy": "external"
},
"architecture": {
"value": "x86",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_RC_COMPILER": "rc",
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe",
"CMAKE_SYSTEM_VERSION": "10.0",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "freerdp-debug",
"displayName": "freerdp Debug",
"inherits": "windows-default",
"description": "freerdp debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"MSVC_RUNTIME": "static",
"BUILD_SHARED_LIBS": "OFF",
"WITH_FFMPEG": "OFF",
"WITH_DSP_FFMPEG": "OFF",
"WITH_JPEG": "OFF",
"WITH_CAIRO": "OFF",
"WITH_SWSCALE": "ON",
"WITH_OPENH264": "ON",
"WITH_MANPAGES": "ON",
"WITH_NATIVE_SSPI": "ON",
"WITH_SSE2": "ON",
"WITH_WINMM": "ON",
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../vcpkg/scripts/buildsystems/vcpkg.cmake",
"VCPKG_TARGET_TRIPLET": "x86-windows-static"
}
},
{
"name": "freerdp-release",
"displayName": "freerdp Release",
"inherits": "windows-default",
"description": "freerdp release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"MSVC_RUNTIME": "static",
"BUILD_SHARED_LIBS": "OFF",
"WITH_FFMPEG": "OFF",
"WITH_DSP_FFMPEG": "OFF",
"WITH_JPEG": "OFF",
"WITH_CAIRO": "OFF",
"WITH_SWSCALE": "ON",
"WITH_OPENH264": "ON",
"WITH_MANPAGES": "ON",
"WITH_NATIVE_SSPI": "ON",
"WITH_SSE2": "ON",
"WITH_WINMM": "ON",
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../vcpkg/scripts/buildsystems/vcpkg.cmake",
"VCPKG_TARGET_TRIPLET": "x86-windows-static"
}
}
]
}
3、vcpkg.json配置,可以利用vcpkg自动编译第三方库(FreeRDP项目根目录下新建)
{
"name": "depends",
"version-string": "1.0.0",
"dependencies": [
"zlib",
"libusb",
"openssl",
{
"name": "ffmpeg",
"default-features": false,
"features": ["swscale"]
},
"openh264"
],
"builtin-baseline": "0789630513565c6ea73caad01f98313cdec1b073",
"overrides": [
{ "name": "openssl", "version-string": "1.1.1n" },
{ "name": "ffmpeg", "version-string": "4.4" }
]
}
4、修正SWSCALE编译时缺少AVUtil.lib的问题
cmake/FindSWScale.cmake 文件中添加
find_library(AVUtil_LIBRARY avutil PATHS ${SWScale_LIBRARY_DIRS})
libfreerdp\CMakeLists.txt 中添加
freerdp_library_add(${AVUtil_LIBRARY})
编译
cmake --preset="freerdp-release" # 这个过程中vcpkg会下载编译所需要的工具和源码,需要良好的网络环境
cmake --build cmake-build-freerdp-release --config Release
运行
FreeRDP-Manuals/User/FreeRDP-User-Manual.markdown at master · awakecoding/FreeRDP-Manuals
编译好的文件在 cmake-build-freerdp-release/wfreerdp.exe
.\wfreerdp.exe /v:<server>[:port] /u:<username> /p:<password> /cert-ignore