当前位置:   article > 正文

FreeRDP在windows上的编译和使用

freerdp

FreeRDPWindows远程桌面协议(RDP)的一种实现,类似于微软自带的mstsc,可以实现windows上的远程连接,特别是对于在ubuntu或者在Mac下,需要在局域网下实现到Windows的远程连接,这是一种不错的选择,对于在Windows 下已经有了mstsc,编译FreeRDP 是为了进行代码的学习。

必备软件的安装

1.vs2019

这里假设大家都会安装vistual studio套件了,不会的百度一下,已经有了很多教程,建议大家用2019或者以后的版本。

2.cmake

FreeRDP不仅仅是windows下能用,在linux平台也可以使用,这次我们需要在windows上进行编译,采用cmake,生成vs的工程。

下载最新版的cmake安装 最新版本,这样后面在生成vs的时候,才能选到最新的编译器。

3.libusb

建议下载 libusb-1.0.24 版本的libusb,打开的目录如下:

在这里插入图片描述

4.openssl

传输数据的通道,采用的是openssl,到官网下载相关版本版本,这里选择的是Win64 v1.1.1版本。

在这里插入图片描述

使用cmake生成VS解决方案

下载最新版本的FreeRDP源码解压放到 目录 D:\work\2022\FreeRDP\FreeRDP-2.7.0
打开cmake,地址配置如下:

在这里插入图片描述
点击configure按钮生成配置文件。

在这里插入图片描述
如果出现了如下的错误:

 error MSB6003: 指定的任务可执行文件“cmd.exe”未能运行。System.IO.IOException: 未能创建临时文件。临时文件文件夹已满或其路径不正确。
  • 1

那是因为我们启动CMake的时候没有用管理员权限。重启以管理员权限打开cmake 编译,

在这里插入图片描述
有两个配置我们还需要配置一下,把 libusb-1.0.24拷贝到项目下,配置LIBUSB_1_LIBRARY,LIBUSB_1_INCLUDE_DIR 到对应的目录下,

LIBUSB_1_INCLUDE_DIR    D:\work\2022\FreeRDP\FreeRDP-2.7.0\libusb-1.0.24\include\libusb-1.0

LIBUSB_1_LIBRARY        D:\work\2022\FreeRDP\FreeRDP-2.7.0\libusb-1.0.24\VS2019\MS64\dll
  • 1
  • 2
  • 3

继续编译,出现Configuring done ,接着继续generate按钮,生成工程项目。
build目录下已经生成了如下的工程文件,用vs打开。
在这里插入图片描述

用vs编译FreeRDP解决方案

vs打开 FreeRDP.sln解决方案,稍微配置一下就可以使用。

点击Open Project打开解决方案 修改freerdp-client项目属性 在属性->链接器->输入->附加的依赖项中增加 D:\work\2022\FreeRDP\FreeRDP-2.7.0\libusb-1.0.24\VS2019\MS64\dll\libusb-1.0.lib

不知道是什么问题,libusb-1.0.lib 并没有出现在lib中需要自己配置,不然会出现连接错误。

29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_init,函数 libusb_freerdp_urbdrc_client_subsystem_entry 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_exit,函数 udevman_free 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_has_capability,函数 poll_thread 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_strerror,函数 libusb_freerdp_urbdrc_client_subsystem_entry 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_get_device_descriptor,函数 hotplug_callback 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2001: 无法解析的外部符号 libusb_get_device_descriptor
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_get_active_config_descriptor,函数 device_is_filtered 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2001: 无法解析的外部符号 libusb_get_active_config_descriptor
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_free_config_descriptor,函数 device_is_filtered 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_get_bus_number,函数 hotplug_callback 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2001: 无法解析的外部符号 libusb_get_bus_number
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_get_device_address,函数 hotplug_callback 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2001: 无法解析的外部符号 libusb_get_device_address
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_try_lock_events,函数 poll_libusb_events 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_unlock_events,函数 poll_libusb_events 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_event_handling_ok,函数 poll_libusb_events 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_event_handler_active,函数 poll_libusb_events 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_lock_event_waiters,函数 poll_libusb_events 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_unlock_event_waiters,函数 poll_libusb_events 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_wait_for_event,函数 poll_libusb_events 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_handle_events_locked,函数 poll_libusb_events 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_hotplug_register_callback,函数 poll_thread 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_hotplug_deregister_callback,函数 poll_thread 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevman.obj) : error LNK2019: 无法解析的外部符号 libusb_set_option,函数 libusb_freerdp_urbdrc_client_subsystem_entry 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2019: 无法解析的外部符号 libusb_error_name,函数 log_libusb_result 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2019: 无法解析的外部符号 libusb_get_device_list,函数 udev_new_by_id 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2019: 无法解析的外部符号 libusb_free_device_list,函数 udev_new_by_id 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2019: 无法解析的外部符号 libusb_unref_device,函数 udev_new_by_id 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2019: 无法解析的外部符号 libusb_get_config_descriptor,函数 udev_init 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2019: 无法解析的外部符号 libusb_get_port_number,函数 udev_init 中引用了该符号
29>urbdrc-client-libusb.lib(libusb_udevice.obj) : error LNK2019: 无法解析的外部符号 libusb_get_port_numbers,函数 udev_get_device_handle 中引用了该符号
。。。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

wfreerdp-client设为启动项,进行编译,生成wfreerdp.exe
在这里插入图片描述
在进行调试之前,把libusb-1.0.dll 拷贝过去,配置运行参数:

在这里插入图片描述
勇敢的跑起来吧。

在这里插入图片描述

出现了让你输入远程账号和密码的界面,输入进行远程连接。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/362650
推荐阅读
相关标签
  

闽ICP备14008679号