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

一次性把依赖装齐

bash 复制代码
sudo apt install -y \
  build-essential git cmake 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)

bash 复制代码
git clone -b 3.19.1 https://github.com/FreeRDP/FreeRDP.git
cd FreeRDP

配置 + 编译

bash 复制代码
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
      -DWITH_CHANNELS=ON \
      -DWITH_SERVER=ON \
      -DWITH_X11=ON \
      -DWITH_WAYLAND=ON \
      ..
make -j$(nproc)
sudo make install
sudo ldconfig          # 让系统找到新 so

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

验证

bash 复制代码
xfreerdp --version
# 输出 3.19.1(或你选的 tag)

编译过程中的错误处理

执行make -j$(nproc)时,报 undefined reference to xf_use_rel_mouse错误,说明 编译器找到了声明,但链接器找不到定义 ------ 即某个源文件没有被编译进最终的可执行文件。

1、找到调用点(一般在 client/X11/xf_event.c)

bash 复制代码
cd ..
grep -n "xf_use_rel_mouse" client/X11/xf_event.c

输出如下:

bash 复制代码
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 行的判断改成 宏包裹(让开关真正生效)

c 复制代码
if (xfc->xi_event || xfc->xi_rawevent || (xfc->common.mouse_grabbed && xf_use_rel_mouse(xfc)))

三处都改成

c 复制代码
if (xfc->xi_event || xfc->xi_rawevent ||
    (xfc->common.mouse_grabbed &&
#ifdef WITH_X11_RELATIVE_MOUSE
     xf_use_rel_mouse(xfc)
#else
     FALSE
#endif
    ))

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

bash 复制代码
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

做完就编译

bash 复制代码
cd build
make -j$(nproc)
相关推荐
一池秋_6 小时前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发
惜离殇6 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
闲云野鹤在人间9 小时前
OpenStack架构介绍和安装流程
linux·网络·架构·openstack
我命由我123459 小时前
Linux - Linux/POSIX 路径斜杠折叠规则
linux·运维·服务器·android studio·android jetpack·android-studio·android runtime
xx~t9 小时前
嵌入式——Linux软件编程——网络1
linux·c语言·网络·vscode·网络协议
Uncertainty!!10 小时前
Linux 主机无法完成校园网认证排查记录:从 DHCP、ARP 到 Portal 认证流程分析
linux·运维·服务器
神威难绷泪10 小时前
Linux消息队列 & 共享内存 笔记
linux·消息队列·共享内存
mounter62511 小时前
突破零停机演进:Linux 内核 Live Update Orchestrator (LUO) 架构设计与热升级演进
linux·服务器·linux kernel·kernel·kho·luo
波多利希最高礼仪的握力器11 小时前
安全复制SCP
linux·服务器·安全
xiaoye-duck11 小时前
《Linux网络编程·加餐》进程间关系与守护进程
linux·网络