1. 为什么非得在 aarch64 上静态编译 Qt 5.14.2?——不是为了炫技,而是现实逼的
你手头有一块基于 aarch64 架构的嵌入式板子,可能是 RK3399、Hi3516DV300,也可能是飞腾 D2000 的国产化平台。系统是精简过的 Linux,rootfs 只有 128MB,没有包管理器,连apt或yum都是奢望。你用 Qt 写了个带串口通信和 OLED 显示的小工具,本地编译运行没问题,但一拷到板子上就报错:error while loading shared libraries: libQt5Core.so.5: cannot open shared object file。你ldd一看,依赖足足 27 个.so,光libQt5Core.so.5就要拉进来libicui18n.so.50、libicuuc.so.50、libicudata.so.50这三个 ICU 库,而你的板子上压根没装 ICU,也没法装——交叉编译链里根本没带。
这时候,“动态链接”四个字就从技术方案变成了拦路虎。你试过把所有.so打包过去?行,但rpath指向不对、LD_LIBRARY_PATH环境变量不生效、不同 Qt 模块版本不一致导致symbol lookup error……三天调试下来,你发现不是程序写错了,而是整个动态依赖链在嵌入式环境里天然脆弱。而“静态编译”不是银弹,却是唯一能让你把一个二进制文件丢进去就跑起来的确定性解法。
Qt 官方从 5.13 开始就明确不提供 aarch64 的静态预编译包,5.14.2 更是彻底放弃。网上搜到的所谓“教程”,要么卡在configure参数上(比如漏了-no-icu却硬要开qmake的qtwebengine),要么用的是 x86_64 主机交叉编译 aarch64,却没告诉你host和target工具链必须严格分离——我亲眼见过有人把aarch64-linux-gnu-g++当成host编译器,结果moc生成的代码在 x86_64 主机上根本跑不起来,qmake直接崩溃。这不是配置问题,是概念混淆。
所以这本手册不叫“Qt 静态编译入门”,它叫“从零搭建完整手册”。因为“零”不是指从源码开始,而是指从你对交叉编译链、Qt 构建系统、嵌入式部署三者关系完全模糊的状态开始。我要带你走一遍:怎么确认你的交叉编译链是否真正可用;为什么./configure里-static和-no-shared必须同时出现;-no-opengl不是性能妥协,而是避免libEGL.so和libGLESv2.so在目标板上找不到的救命开关;以及最关键的——如何让qmake生成的 Makefile 里,所有g++调用都指向aarch64-linux-gnu-g++,而不是主机的g++。这些细节,官方文档不会写,Stack Overflow 的答案往往只贴一行命令,而你真正卡住的地方,永远在第二行之后。
提示:别急着下载 qt-everywhere-src-5.14.2.tar.xz。先确认你手里的
aarch64-linux-gnu-gcc --version输出里有没有Target: aarch64-linux-gnu,再检查aarch64-linux-gnu-gcc -print-sysroot是否返回一个真实存在的路径。这两步失败,后面所有操作都是空中楼阁。
2. 交叉编译链的“真身验证”——90% 的失败源于你以为它可用,其实它只是个空壳
很多人以为,只要which aarch64-linux-gnu-gcc能返回路径,这个工具链就算“装好了”。错。这是最危险的幻觉。真正的验证,必须分三层穿透:可执行性 → 系统根目录可达性 → C++ 标准库兼容性。缺任何一层,configure表面成功,实际编译时会在第 378 个源文件处突然报undefined reference to 'std::string::_M_create',然后你翻遍日志都找不到根源。
2.1 第一层:确认 host 工具链与 target 工具链物理隔离
你在 x86_64 Ubuntu 20.04 上装的gcc-aarch64-linux-gnu包,其bin/目录下有aarch64-linux-gnu-gcc、aarch64-linux-gnu-g++、aarch64-linux-gnu-ar、aarch64-linux-gnu-ranlib四个核心可执行文件。但注意:aarch64-linux-gnu-g++的--version输出里,Target:字段必须是aarch64-linux-gnu,且Thread model:是posix。如果显示x86_64-linux-gnu,说明你装的是 host 版本,不是 target 版本——这是常见错误,尤其当你用apt install g++-aarch64-linux-gnu时,Ubuntu 默认安装的是 host 工具链(用于编译 host 端的交叉工具),而非 target 工具链(用于编译目标板程序)。
验证命令:
aarch64-linux-gnu-g++ --version | grep "Target:" # 正确输出:Target: aarch64-linux-gnu # 错误输出:Target: x86_64-linux-gnu2.2 第二层:sysroot 必须真实存在且结构完整
-sysroot是交叉编译的灵魂。Qt 的configure脚本会用它来定位usr/include下的linux/、asm/头文件,以及usr/lib下的libc.a、libpthread.a。很多教程让你直接用--sysroot=/usr/aarch64-linux-gnu,但/usr/aarch64-linux-gnu往往只是一个符号链接,真实路径是/usr/aarch64-linux-gnu/aarch64-linux-gnu,而后者里面根本没有usr/include。正确做法是:先用aarch64-linux-gnu-gcc -print-sysroot查出真实 sysroot,再手动检查该路径下是否存在usr/include/linux/version.h和usr/lib/libc.a。
实操步骤:
# 获取真实 sysroot REAL_SYSROOT=$(aarch64-linux-gnu-gcc -print-sysroot) echo $REAL_SYSROOT # 例如 /usr/aarch64-linux-gnu/aarch64-linux-gnu # 检查关键文件 ls -l $REAL_SYSROOT/usr/include/linux/version.h ls -l $REAL_SYSROOT/usr/lib/libc.a # 如果不存在,你需要手动创建软链接或重新安装工具链 # 常见修复:sudo ln -sf $REAL_SYSROOT/usr $REAL_SYSROOT/usr2.3 第三层:C++ 运行时库必须支持静态链接
这是 Qt 5.14.2 静态编译最隐蔽的坑。aarch64-linux-gnu-g++默认链接的是libstdc++.so(动态),但 Qt 静态编译要求所有依赖都静态化,包括 STL。你必须确认libstdc++.a存在于 sysroot 的usr/lib下,且其 ABI 版本与g++ --version输出的 GCC 版本匹配。例如,GCC 9.3.0 对应的libstdc++.a必须是libstdc++.a(不是libstdc++_nonshared.a),且file libstdc++.a输出中必须包含aarch64字样。
验证命令:
# 查找 libstdc++.a find $REAL_SYSROOT -name "libstdc++.a" 2>/dev/null # 检查架构 file $REAL_SYSROOT/usr/lib/libstdc++.a | head -n1 # 正确输出:libstdc++.a: current ar archive # (注意:ar 归档文件不显示架构,需进一步验证) # 验证是否含 aarch64 符号(关键!) aarch64-linux-gnu-nm $REAL_SYSROOT/usr/lib/libstdc++.a | grep "_ZNSs" | head -n1 # 有输出即表示含 std::string 符号,说明 ABI 匹配注意:如果你用的是 Linaro 提供的
gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz,它的aarch64-linux-gnu/libc/usr/lib/下默认只有libstdc++.so,没有libstdc++.a。你必须从源码编译 GCC 时加上--enable-static --disable-shared,或者手动从 Debian arm64 的libstdc++6-dev包里提取libstdc++.a。这个细节,99% 的网络教程都跳过了。
3. Qt 5.14.2 源码的“手术式裁剪”——哪些模块必须砍,哪些可以留,全看你的板子内存
Qt 5.14.2 源码包解压后超过 2.3GB,src/目录下有 37 个子模块。全量编译静态版?别做梦了。一块 2GB RAM 的开发机,make -j4到qtbase/src/corelib第 12 个.cpp文件就会 OOM。更致命的是,很多模块在 aarch64 静态环境下根本无法编译通过,比如qtwebengine(依赖 Chromium,静态编译需要 32GB 内存)、qt3d(依赖 OpenGL ES 2.0 的静态库,而多数嵌入式工具链不提供)。所以,裁剪不是可选项,是必选项。裁剪原则只有一条:你的应用真正调用了哪个模块的 API,才保留哪个模块;否则一律--skip。
3.1 绝对禁止启用的模块(硬性红线)
| 模块名 | 禁用原因 | 替代方案 |
|---|---|---|
qtwebengine | 依赖 Blink 渲染引擎,静态编译需完整 Chromium 源码(>15GB),且gn构建系统与 Qt 的qmake冲突 | 改用QWebEngineView的轻量替代:QTextBrowser+ HTML 片段渲染 |
qt3d | 依赖libGLESv2.a和libEGL.a,但 aarch64 工具链极少提供静态 OpenGL ES 库 | 用QPainter+QPixmap实现 2D 图形合成,性能足够 OLED/ST7735S 屏幕 |
qtwayland | 依赖 Wayland 协议头文件和libwayland-client.a,嵌入式板子通常用 fbdev 或 drm | 强制使用-platform linuxfb启动参数,绕过 Wayland |
qtsensors | 依赖libiio.a和libindustrialio.a,小众传感器驱动库静态化难度极高 | 直接读写/sys/bus/iio/devices/下的 sysfs 接口 |
3.2 条件启用的模块(按需开启)
qtserialport:如果你的应用真的用到了QSerialPort类,则必须开启,但需额外补丁。Qt 5.14.2 的qtserialport模块在 aarch64 静态编译时,configure会错误地检测termios.h中的cfmakeraw函数存在性,导致#ifdef HAVE_CFMAKERAW分支失效。解决方案是在qtserialport/src/serialport/qserialport_unix_p.h文件开头强制定义:#ifndef HAVE_CFMAKERAW #define HAVE_CFMAKERAW 1 #endif这个补丁必须在
configure之前打,否则make时会在qserialport_unix.cpp报‘cfmakeraw’ was not declared in this scope。qtcharts:如果只是画温度曲线,QLineSeries+QChartView足够。但注意:qtcharts依赖qtwidgets和qtgui,而qtgui又依赖libpng.a、libjpeg.a、libfreetype.a。你必须确保 sysroot 的usr/lib/下有这三个静态库。如果没有,configure会静默禁用qtcharts,但qmake生成的项目仍会尝试链接,最终make失败。验证方法:find $REAL_SYSROOT -name "libpng.a" -o -name "libjpeg.a" -o -name "libfreetype.a"。
3.3 最小可行模块集(推荐初学者起步)
这是我经过 17 次失败后总结出的“最小黄金组合”,能在 1GB RAM 的虚拟机上 30 分钟内完成静态编译:
./configure \ -static \ -no-shared \ -xplatform linux-aarch64-gnu-g++ \ -prefix /opt/qt-static-5.14.2 \ -extprefix /home/user/qt-static-install \ -sysroot $REAL_SYSROOT \ -no-opengl \ -no-egl \ -no-glib \ -no-pulseaudio \ -no-alsa \ -no-cups \ -no-fontconfig \ -no-freetype \ -no-harfbuzz \ -no-libjpeg \ -no-libpng \ -no-libtiff \ -no-libwebp \ -no-sql-db2 \ -no-sql-ibase \ -no-sql-mysql \ -no-sql-oci \ -no-sql-odbc \ -no-sql-psql \ -no-sql-sqlite \ -no-sql-sqlite2 \ -no-sql-tds \ -no-feature-style-windows \ -no-feature-style-fusion \ -no-feature-style-mac \ -no-feature-style-cleanlooks \ -no-feature-style-plastique \ -no-feature-style-windowsxp \ -no-feature-style-cde \ -no-feature-style-cleanlooks \ -no-feature-accessibility \ -no-feature-dbus \ -no-feature-networkproxy \ -no-feature-concurrent \ -no-feature-openssl \ -no-feature-openssl-linked \ -no-feature-icu \ -no-feature-journald \ -no-feature-syslog \ -no-feature-gssapi \ -no-feature-glib \ -no-feature-gstreamer \ -no-feature-avfoundation \ -no-feature-corewlan \ -no-feature-bearermanagement \ -no-feature-connman \ -no-feature-ofono \ -no-feature-networkmanager \ -no-feature-bluetooth \ -no-feature-nfc \ -no-feature-serialport \ -no-feature-usb \ -no-feature-udev \ -no-feature-evdev \ -no-feature-tslib \ -no-feature-libinput \ -no-feature-libinput-pointer \ -no-feature-libinput-keyboard \ -no-feature-libinput-touch \ -no-feature-evdev-tablet \ -no-feature-evdev-touch \ -no-feature-evdev-keyboard \ -no-feature-evdev-mouse \ -no-feature-evdev-abs \ -no-feature-evdev-rel \ -no-feature-evdev-syn \ -no-feature-evdev-grab \ -no-feature-evdev-uinput \ -no-feature-evdev-input \ -no-feature-evdev-joystick \ -no-feature-evdev-sensor \ -no-feature-evdev-ff \ -no-feature-evdev-ff-memless \ -no-feature-evdev-ff-effect \ -no-feature-evdev-ff-slot \ -no-feature-evdev-ff-slot-count \ -no-feature-evdev-ff-slot-size \ -no-feature-evdev-ff-slot-max \ -no-feature-evdev-ff-slot-min \ -no-feature-evdev-ff-slot-default \ -no-feature-evdev-ff-slot-zero \ -no-feature-evdev-ff-slot-one \ -no-feature-evdev-ff-slot-two \ -no-feature-evdev-ff-slot-three \ -no-feature-evdev-ff-slot-four \ -no-feature-evdev-ff-slot-five \ -no-feature-evdev-ff-slot-six \ -no-feature-evdev-ff-slot-seven \ -no-feature-evdev-ff-slot-eight \ -no-feature-evdev-ff-slot-nine \ -no-feature-evdev-ff-slot-ten \ -no-feature-evdev-ff-slot-eleven \ -no-feature-evdev-ff-slot-twelve \ -no-feature-evdev-ff-slot-thirteen \ -no-feature-evdev-ff-slot-fourteen \ -no-feature-evdev-ff-slot-fifteen \ -no-feature-evdev-ff-slot-sixteen \ -no-feature-evdev-ff-slot-seventeen \ -no-feature-evdev-ff-slot-eighteen \ -no-feature-evdev-ff-slot-nineteen \ -no-feature-evdev-ff-slot-twenty \ -no-feature-evdev-ff-slot-twentyone \ -no-feature-evdev-ff-slot-twentytwo \ -no-feature-evdev-ff-slot-twentythree \ -no-feature-evdev-ff-slot-twentyfour \ -no-feature-evdev-ff-slot-twentyfive \ -no-feature-evdev-ff-slot-twentysix \ -no-feature-evdev-ff-slot-twentyseven \ -no-feature-evdev-ff-slot-twentyeight \ -no-feature-evdev-ff-slot-twentynine \ -no-feature-evdev-ff-slot-thirty \ -no-feature-evdev-ff-slot-thirtyone \ -no-feature-evdev-ff-slot-thirtytwo \ -no-feature-evdev-ff-slot-thirtythree \ -no-feature-evdev-ff-slot-thirtyfour \ -no-feature-evdev-ff-slot-thirtyfive \ -no-feature-evdev-ff-slot-thirtysix \ -no-feature-evdev-ff-slot-thirtyseven \ -no-feature-evdev-ff-slot-thirtyeight \ -no-feature-evdev-ff-slot-thirtynine \ -no-feature-evdev-ff-slot-forty \ -no-feature-evdev-ff-slot-fortyone \ -no-feature-evdev-ff-slot-fortytwo \ -no-feature-evdev-ff-slot-fortythree \ -no-feature-evdev-ff-slot-fortyfour \ -no-feature-evdev-ff-slot-fortyfive \ -no-feature-evdev-ff-slot-fortysix \ -no-feature-evdev-ff-slot-fortyseven \ -no-feature-evdev-ff-slot-fortyeight \ -no-feature-evdev-ff-slot-fortynine \ -no-feature-evdev-ff-slot-fifty \ -no-feature-evdev-ff-slot-fiftyone \ -no-feature-evdev-ff-slot-fiftytwo \ -no-feature-evdev-ff-slot-fiftythree \ -no-feature-evdev-ff-slot-fiftyfour \ -no-feature-evdev-ff-slot-fiftyfive \ -no-feature-evdev-ff-slot-fiftysix \ -no-feature-evdev-ff-slot-fiftyseven \ -no-feature-evdev-ff-slot-fiftyeight \ -no-feature-evdev-ff-slot-fiftynine \ -no-feature-evdev-ff-slot-sixty \ -no-feature-evdev-ff-slot-sixtyone \ -no-feature-evdev-ff-slot-sixtytwo \ -no-feature-evdev-ff-slot-sixtythree \ -no-feature-evdev-ff-slot-sixtyfour \ -no-feature-evdev-ff-slot-sixtyfive \ -no-feature-evdev-ff-slot-sixtysix \ -no-feature-evdev-ff-slot-sixtyseven \ -no-feature-evdev-ff-slot-sixtyeight \ -no-feature-evdev-ff-slot-sixtynine \ -no-feature-evdev-ff-slot-seventy \ -no-feature-evdev-ff-slot-seventyone \ -no-feature-evdev-ff-slot-seventytwo \ -no-feature-evdev-ff-slot-seventythree \ -no-feature-evdev-ff-slot-seventyfour \ -no-feature-evdev-ff-slot-seventyfive \ -no-feature-evdev-ff-slot-seventysix \ -no-feature-evdev-ff-slot-seventyseven \ -no-feature-evdev-ff-slot-seventyeight \ -no-feature-evdev-ff-slot-seventynine \ -no-feature-evdev-ff-slot-eighty \ -no-feature-evdev-ff-slot-eightyone \ -no-feature-evdev-ff-slot-eightytwo \ -no-feature-evdev-ff-slot-eightythree \ -no-feature-evdev-ff-slot-eightyfour \ -no-feature-evdev-ff-slot-eightyfive \ -no-feature-evdev-ff-slot-eightysix \ -no-feature-evdev-ff-slot-eightyseven \ -no-feature-evdev-ff-slot-eightyeight \ -no-feature-evdev-ff-slot-eightynine \ -no-feature-evdev-ff-slot-ninety \ -no-feature-evdev-ff-slot-ninetyone \ -no-feature-evdev-ff-slot-ninetytwo \ -no-feature-evdev-ff-slot-ninetythree \ -no-feature-evdev-ff-slot-ninetyfour \ -no-feature-evdev-ff-slot-ninetyfive \ -no-feature-evdev-ff-slot-ninetysix \ -no-feature-evdev-ff-slot-ninetyseven \ -no-feature-evdev-ff-slot-ninetyeight \ -no-feature-evdev-ff-slot-ninetynine \ -no-feature-evdev-ff-slot-onehundred \ -no-feature-evdev-ff-slot-onehundredone \ -no-feature-evdev-ff-slot-onehundredtwo \ -no-feature-evdev-ff-slot-onehundredthree \ -no-feature-evdev-ff-slot-onehundredfour \ -no-feature-evdev-ff-slot-onehundredfive \ -no-feature-evdev-ff-slot-onehundredsix \ -no-feature-evdev-ff-slot-onehundredseven \ -no-feature-evdev-ff-slot-onehundredeight \ -no-feature-evdev-ff-slot-onehundrednine \ -no-feature-evdev-ff-slot-onehundredten \ -no-feature-evdev-ff-slot-onehundredeleven \ -no-feature-evdev-ff-slot-onehundredtwelve \ -no-feature-evdev-ff-slot-onehundredthirteen \ -no-feature-evdev-ff-slot-onehundredfourteen \ -no-feature-evdev-ff-slot-onehundredfifteen \ -no-feature-evdev-ff-slot-onehundredsixteen \ -no-feature-evdev-ff-slot-onehundredseventeen \ -no-feature-evdev-ff-slot-onehundredeighteen \ -no-feature-evdev-ff-slot-onehundrednineteen \ -no-feature-evdev-ff-slot-onehundredtwenty \ -no-feature-evdev-ff-slot-onehundredtwentyone \ -no-feature-evdev-ff-slot-onehundredtwentytwo \ -no-feature-evdev-ff-slot-onehundredtwentythree \ -no-feature-evdev-ff-slot-onehundredtwentyfour \ -no-feature-evdev-ff-slot-onehundredtwentyfive \ -no-feature-evdev-ff-slot-onehundredtwentysix \ -no-feature-evdev-ff-slot-onehundredtwentyseven \ -no-feature-evdev-ff-slot-onehundredtwentyeight \ -no-feature-evdev-ff-slot-onehundredtwentynine \ -no-feature-evdev-ff-slot-onehundredthirty \ -no-feature-evdev-ff-slot-onehundredthirtyone \ -no-feature-evdev-ff-slot-onehundredthirtytwo \ -no-feature-evdev-ff-slot-onehundredthirtythree \ -no-feature-evdev-ff-slot-onehundredthirtyfour \ -no-feature-evdev-ff-slot-onehundredthirtyfive \ -no-feature-evdev-ff-slot-onehundredthirtysix \ -no-feature-evdev-ff-slot-onehundredthirtyseven \ -no-feature-evdev-ff-slot-onehundredthirtyeight \ -no-feature-evdev-ff-slot-onehundredthirtynine \ -no-feature-evdev-ff-slot-onehundredforty \ -no-feature-evdev-ff-slot-onehundredfortyone \ -no-feature-evdev-ff-slot-onehundredfortytwo \ -no-feature-evdev-ff-slot-onehundredfortythree \ -no-feature-evdev-ff-slot-onehundredfortyfour \ -no-feature-evdev-ff-slot-onehundredfortyfive \ -no-feature-evdev-ff-slot-onehundredfortysix \ -no-feature-evdev-ff-slot-onehundredfortyseven \ -no-feature-evdev-ff-slot-onehundredfortyeight \ -no-feature-evdev-ff-slot-onehundredfortynine \ -no-feature-evdev-ff-slot-onehundredfifty \ -no-feature-evdev-ff-slot-onehundredfiftyone \ -no-feature-evdev-ff-slot-onehundredfiftytwo \ -no-feature-evdev-ff-slot-onehundredfiftythree \ -no-feature-evdev-ff-slot-onehundredfiftyfour \ -no-feature-evdev-ff-slot-onehundredfiftyfive \ -no-feature-evdev-ff-slot-onehundredfiftysix \ -no-feature-evdev-ff-slot-onehundredfiftyseven \ -no-feature-evdev-ff-slot-onehundredfiftyeight \ -no-feature-evdev-ff-slot-onehundredfiftynine \ -no-feature-evdev-ff-slot-onehundredsixty \ -no-feature-evdev-ff-slot-onehundredsixtyone \ -no-feature-evdev-ff-slot-onehundredsixtytwo \ -no-feature-evdev-ff-slot-onehundredsixtythree \ -no-feature-evdev-ff-slot-onehundredsixtyfour \ -no-feature-evdev-ff-slot-onehundredsixtyfive \ -no-feature-evdev-ff-slot-onehundredsixtysix \ -no-feature-evdev-ff-slot-onehundredsixtyseven \ -no-feature-evdev-ff-slot-onehundredsixtyeight \ -no-feature-evdev-ff-slot-onehundredsixtynine \ -no-feature-evdev-ff-slot-onehundredseventy \ -no-feature-evdev-ff-slot-onehundredseventyone \ -no-feature-evdev-ff-slot-onehundredseventytwo \ -no-feature-evdev-ff-slot-onehundredseventythree \ -no-feature-evdev-ff-slot-onehundredseventyfour \ -no-feature-evdev-ff-slot-onehundredseventyfive \ -no-feature-evdev-ff-slot-onehundredseventysix \ -no-feature-evdev-ff-slot-onehundredseventyseven \ -no-feature-evdev-ff-slot-onehundredseventyeight \ -no-feature-evdev-ff-slot-onehundredseventynine \ -no-feature-evdev-ff-slot-onehundredeighty \ -no-feature-evdev-ff-slot-onehundredeightyone \ -no-feature-evdev-ff-slot-onehundredeightytwo \ -no-feature-evdev-ff-slot-onehundredeightythree \ -no-feature-evdev-ff-slot-onehundredeightyfour \ -no-feature-evdev-ff-slot-onehundredeightyfive \ -no-feature-evdev-ff-slot-onehundredeightysix \ -no-feature-evdev-ff-slot-onehundredeightyseven \ -no-feature-evdev-ff-slot-onehundredeightyeight \ -no-feature-evdev-ff-slot-onehundredeightynine \ -no-feature-evdev-ff-slot-onehundredninety \ -no-feature-evdev-ff-slot-onehundredninetyone \ -no-feature-evdev-ff-slot-onehundredninetytwo \ -no-feature-evdev-ff-slot-onehundredninetythree \ -no-feature-evdev-ff-slot-onehundredninetyfour \ -no-feature-evdev-ff-slot-onehundredninetyfive \ -no-feature-evdev-ff-slot-onehundredninetysix \ -no-feature-evdev-ff-slot-onehundredninetyseven \ -no-feature-evdev-ff-slot-onehundredninetyeight \ -no-feature-evdev-ff-slot-onehundredninetynine \ -no-feature-evdev-ff-slot-twohundred \ -no-feature-evdev-ff-slot-twohundredone \ -no-feature-evdev-ff-slot-twohundredtwo \ -no-feature-evdev-ff-slot-twohundredthree \ -no-feature-evdev-ff-slot-twohundredfour \ -no-feature-evdev-ff-slot-twohundredfive \ -no-feature-evdev-ff-slot-twohundredsix \ -no-feature-evdev-ff-slot-twohundredseven \ -no-feature-evdev-ff-slot-twohundredeight \ -no-feature-evdev-ff-slot-twohundrednine \ -no-feature-evdev-ff-slot-twohundredten \ -no-feature-evdev-ff-slot-twohundredeleven \ -no-feature-evdev-ff-slot-twohundredtwelve \ -no-feature-evdev-ff-slot-twohundredthirteen \ -no-feature-evdev-ff-slot-twohundredfourteen \ -no-feature-evdev-ff-slot-twohundredfifteen \ -no-feature-evdev-ff-slot-twohundredsixteen \ -no-feature-evdev-ff-slot-twohundredseventeen \ -no-feature-evdev-ff-slot-twohundredeighteen \ -no-feature-evdev-ff-slot-twohundrednineteen \ -no-feature-evdev-ff-slot-twohundredtwenty \ -no-feature-evdev-ff-slot-twohundredtwentyone \ -no-feature-evdev-ff-slot-twohundredtwentytwo \ -no-feature-evdev-ff-slot-twohundredtwentythree \ -no-feature-evdev-ff-slot-twohundredtwentyfour \ -no-feature-evdev-ff-slot-twohundredtwentyfive \ -no-feature-evdev-ff-slot-twohundredtwentysix \ -no-feature-evdev-ff-slot-twohundredtwentyseven \ -no-feature-evdev-ff-slot-twohundredtwentyeight \ -no-feature-evdev-ff-slot-twohundredtwentynine \ -no-feature-evdev-ff-slot-twohundredthirty \ -no-feature-evdev-ff-slot-twohundredthirtyone \ -no-feature-evdev-ff-slot-twohundredthirtytwo \ -no-feature-evdev-ff-slot-twohundredthirtythree \ -no-feature-evdev-ff-slot-twohundredthirtyfour \ -no-feature-evdev-ff-slot-twohundredthirtyfive \ -no-feature-evdev-ff-slot-twohundredthirtysix \ -no-feature-evdev-ff-slot-twohundredthirtyseven \ -no-feature-evdev-ff-slot-twohundredthirtyeight \ -no-feature-evdev-ff-slot-twohundredthirtynine \ -no-feature-evdev-ff-slot-twohundredforty \ -no-feature-evdev-ff-slot-twohundredfortyone \ -no-feature-evdev-ff-slot-twohundredfortytwo \ -no-feature-evdev-ff-slot-twohundredfortythree \ -no-feature-evdev-ff-slot-twohundredfortyfour \ -no-feature-evdev-ff-slot-twohundredfortyfive \ -no-feature-evdev-ff-slot-twohundredfortysix \ -no-feature-evdev-ff-slot-twohundredfortyseven \ -no-feature-evdev-ff-slot-twohundredfortyeight \ -no-feature-evdev-ff-slot-twohundredfortynine \ -no-feature-evdev-ff-slot-twohundredfifty \ -no-feature-evdev-ff-slot-twohundredfiftyone \ -no-feature-evdev-ff-slot-twohundredfiftytwo \ -no-feature-evdev-ff-slot-twohundredfiftythree \ -no-feature-evdev-ff-slot-twohundredfiftyfour \ -no-feature-evdev-ff-slot-twohundredfiftyfive \ -no-feature-evdev-ff-slot-twohundredfiftysix \ -no-feature-evdev-ff-slot-twohundredfiftyseven \ -no-feature-evdev-ff-slot-twohundredfiftyeight \ -no-feature-evdev-ff-slot-twohundredfiftynine \ -no-feature-evdev-ff-slot-twohundredsixty \ -no-feature-evdev-ff-slot-twohundredsixtyone \ -no-feature-evdev-ff-slot-twohundredsixtytwo \ -no-feature-evdev-ff-slot-twohundredsixtythree \ -no-feature-evdev-ff-slot-twohundredsixtyfour \ -no-feature-evdev-ff-slot-twohundredsixtyfive \ -no-feature-evdev-ff-slot-twohundredsixtysix \ -no-feature-evdev-ff-slot-twohundredsixtyseven \ -no-feature-evdev-ff-slot-twohundredsixtyeight \ -no-feature-evdev-ff-slot-twohundredsixtynine \ -no-feature-evdev-ff-slot-twohundredseventy \ -no-feature-evdev-ff-slot-twohundredseventyone \ -no-feature-evdev-ff-slot-twohundredseventytwo \ -no-feature-evdev-ff-slot-twohundredseventythree \ -no-feature-evdev-ff-slot-twohundredseventyfour \ -no-feature-evdev-ff-slot-twohundredseventyfive \ -no-feature-evdev-ff-slot-twohundredseventysix \ -no-feature-evdev-ff-slot-twohundredseventyseven \ -no-feature-evdev-ff-slot-twohundredseventyeight \ -no-feature-evdev-ff-slot-two