赞
踩
FreeRDP
是 Windows
下远程桌面协议(RDP)的一种实现,类似于微软自带的mstsc
,可以实现windows上的远程连接,特别是对于在ubuntu
或者在Mac
下,需要在局域网下实现到Windows
的远程连接,这是一种不错的选择,对于在Windows
下已经有了mstsc
,编译FreeRDP
是为了进行代码的学习。
这里假设大家都会安装vistual studio
套件了,不会的百度一下,已经有了很多教程,建议大家用2019或者以后的版本。
FreeRDP
不仅仅是windows
下能用,在linux平台也可以使用,这次我们需要在windows
上进行编译,采用cmake
,生成vs
的工程。
下载最新版的cmake
,安装 最新版本,这样后面在生成vs
的时候,才能选到最新的编译器。
建议下载 libusb-1.0.24
版本的libusb
,打开的目录如下:
传输数据的通道,采用的是openssl
,到官网下载相关版本版本,这里选择的是Win64 v1.1.1
版本。
下载最新版本的FreeRDP
源码解压放到 目录 D:\work\2022\FreeRDP\FreeRDP-2.7.0
打开cmake
,地址配置如下:
点击configure
按钮生成配置文件。
如果出现了如下的错误:
error MSB6003: 指定的任务可执行文件“cmd.exe”未能运行。System.IO.IOException: 未能创建临时文件。临时文件文件夹已满或其路径不正确。
那是因为我们启动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
继续编译,出现Configuring done
,接着继续generate
按钮,生成工程项目。
看build
目录下已经生成了如下的工程文件,用vs
打开。
用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 中引用了该符号 。。。
把wfreerdp-client
设为启动项,进行编译,生成wfreerdp.exe
在进行调试之前,把libusb-1.0.dll
拷贝过去,配置运行参数:
勇敢的跑起来吧。
出现了让你输入远程账号和密码的界面,输入进行远程连接。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。