当前位置: 首页 > news >正文

ubuntu编译安装FreeRDP Version 3.x.x 版本

一次性把依赖装齐

sudoaptinstall-y\build-essentialgitcmake ninja-build pkg-config\libssl-dev libx11-dev libxext-dev libxinerama-dev\libxcursor-dev libxdamage-dev libxv-dev libxkbfile-dev\libasound2-dev libcups2-dev libpulse-dev libjpeg-dev\libusb-1.0-0-dev libudev-dev libdbus-1-dev\libwayland-dev libpam0g-dev libkrb5-dev libfuse3-dev\libxkbcommon-dev wayland-protocols libwayland-dev

拉取 3.19.1 源码(也可换其他 3.x tag)

gitclone -b3.19.1 https://github.com/FreeRDP/FreeRDP.gitcdFreeRDP

配置 + 编译

mkdirbuild&&cdbuild cmake -DCMAKE_BUILD_TYPE=Release\-DWITH_CHANNELS=ON\-DWITH_SERVER=ON\-DWITH_X11=ON\-DWITH_WAYLAND=ON\..make-j$(nproc)sudomakeinstallsudoldconfig# 让系统找到新 so

cmake时,如果提示还缺少依赖,使用sudo apt install -y安装对应的依赖即可,然后重新cmake

验证

xfreerdp --version# 输出 3.19.1(或你选的 tag)

编译过程中的错误处理

执行make -j$(nproc)时,报undefined reference to xf_use_rel_mouse错误,说明 编译器找到了声明,但链接器找不到定义 —— 即某个源文件没有被编译进最终的可执行文件。
1、找到调用点(一般在 client/X11/xf_event.c)

cd..grep-n"xf_use_rel_mouse"client/X11/xf_event.c

输出如下:

491:if(xfc->xi_event||xfc->xi_rawevent||(xfc->common.mouse_grabbed&&xf_use_rel_mouse(xfc)))604:if(xfc->xi_event||xfc->xi_rawevent||(xfc->common.mouse_grabbed&&xf_use_rel_mouse(xfc)))617:if(xfc->xi_event||xfc->xi_rawevent||(xfc->common.mouse_grabbed&&xf_use_rel_mouse(xfc)))

源码里 3 处直接调用 xf_use_rel_mouse() 作为逻辑判断,而 开关 -DWITH_X11_RELATIVE_MOUSE=OFF 只控制函数“是否编译”,却没把调用点包起来,于是链接时找不到定义。
需要把 491、604、617 行的判断改成 宏包裹(让开关真正生效)

if(xfc->xi_event||xfc->xi_rawevent||(xfc->common.mouse_grabbed&&xf_use_rel_mouse(xfc)))

三处都改成

if(xfc->xi_event||xfc->xi_rawevent||(xfc->common.mouse_grabbed&&#ifdefWITH_X11_RELATIVE_MOUSExf_use_rel_mouse(xfc)#elseFALSE#endif))

下面一条 sed 命令把 3 处调用全部包进宏,原地备份(.bak):

sed-i.bak\'s/(xfc->common.mouse_grabbed && xf_use_rel_mouse(xfc))/\ (xfc->common.mouse_grabbed \&\& \ #ifdef WITH_X11_RELATIVE_MOUSE\n\ xf_use_rel_mouse(xfc)\n\ #else\n\ FALSE\n\ #endif\n\ )/g'\client/X11/xf_event.c

做完就编译

cdbuildmake-j$(nproc)
http://www.cnnetsun.cn/news/94000.html

相关文章:

  • PDF对比终极方案:如何用diff-pdf快速找出文档差异
  • Burp Suite抓包失败的5个常见原因及解决方法,第3个最容易被忽略!
  • 显卡驱动彻底清理指南:3步用DDU解决残留问题
  • Java毕设项目推荐-基于JavaWeb的心聘求职平台的设计与实现求职就业平台设计与实现【附源码+文档,调试定制服务】
  • XUnity自动翻译插件:零基础入门到实战精通指南
  • OBS直播优化全攻略:从新手到专家的配置进阶之路
  • 面试问题预测:LobeChat模拟真实考场
  • LobeChat能否对接冥王星地形图?柯伊伯带天体特征科普
  • TegraRcmGUI:Nintendo Switch自定义payload注入的图形化解决方案
  • FlutterOpenHarmony商城App倒计时组件开发
  • Beyond Compare 5终极激活指南:3分钟快速生成永久授权密钥
  • 5分钟搞定Android投屏:QtScrcpy零门槛操作指南
  • Windows 11安装蓝屏终结者:MediaCreationTool.bat实战指南
  • BGE-Large-zh-v1.5终极指南:快速上手文本嵌入模型部署
  • tensorflow 零基础吃透:tf.sparse.SparseTensor 与核心 TensorFlow API 的协同使用
  • tensorflow 零基础吃透:TensorFlow 张量切片与数据插入(附目标检测 / NLP 实战场景)
  • windows用户态到内核态
  • 嵌入式系统(基于FreeRTOS)串口命令行调试工具
  • Qwen3-VL-8B中文多模态实测:懂语境更懂中国用户
  • Axios网络请求优化(缓存)
  • 通过短时倒谱(Cepstrogram)计算进行时-倒频分析研究附Matlab代码
  • 无人机启用的无线传感器网络中的节能数据收集附Matlab代码
  • [特殊字符]️ 羽毛球检测数据集介绍-1686张图片 运动赛事分析 智能健身设备 自动裁判系统 体育视频内容分析 机器人运动训练
  • AI 论文辅助对决!虎贲等考 AI:全流程赋能,稳坐毕业论文 “最强辅助” 宝座
  • 查重 + AIGC 双检测通关!虎贲等考 AI 降重功能,解锁论文原创新境界
  • BetterNCM插件安装终极指南:解锁网易云音乐隐藏功能
  • 百度网盘直链解析:告别龟速下载的技术革命
  • TranslucentTB启动故障修复指南:快速解决任务栏透明工具无法运行问题
  • 速藏!AI大模型工程师进阶手册:从入门到实战的全攻略
  • NVIDIA Profile Inspector终极优化指南:解锁显卡隐藏性能