1071. Speech Patterns (25)

map的使用

时间限制
300 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
HOU, Qiming

People often have a preference among synonyms of the same word. For example, some may prefer "the police", while others may prefer "the cops". Analyzing such patterns can help to narrow down a speaker's identity, which is useful when validating, for example, whether it's still the same person behind an online avatar.

Now given a paragraph of text sampled from someone's speech, can you find the person's most commonly used word?

Input Specification:

Each input file contains one test case. For each case, there is one line of text no more than 1048576 characters in length, terminated by a carriage return '\n'. The input contains at least one alphanumerical character, i.e., one character from the set [0-9 A-Z a-z].

Output Specification:

For each test case, print in one line the most commonly occurring word in the input text, followed by a space and the number of times it has occurred in the input. If there are more than one such words, print the lexicographically smallest one. The word should be printed in all lower case. Here a "word" is defined as a continuous sequence of alphanumerical characters separated by non-alphanumerical characters or the line beginning/end.

Note that words are case insensitive.

Sample Input:
Can1: "Can a can can a can?  It can!"
Sample Output:
can 5
 


   
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5. #include <algorithm>
  6. #include <map>
  7. #pragma warning(disable:4996)
  8. using namespace std;
  9. map<string, int> mp;
  10. bool CheckChar(char a) {
  11. if (a >= '0'&&a <= '9')
  12. return true;
  13. else if (a >= 'a'&&a <= 'z')
  14. return true;
  15. else if (a >= 'A'&&a <= 'Z')
  16. return true;
  17. else
  18. return false;
  19. }
  20. int main(void) {
  21. string wordTemp;
  22. char ab;
  23. bool stopFlag = false;
  24. string maxS;
  25. int max = 0;
  26. while (true)
  27. {
  28. if (stopFlag == true)
  29. break;
  30. scanf("%c", &ab);
  31. if (ab == '\n')
  32. stopFlag = true;
  33. if (CheckChar(ab)==true) {
  34. if (ab >= 'A'&&ab <= 'Z')
  35. wordTemp += ab - 'A' + 'a';
  36. else
  37. wordTemp += ab;
  38. }
  39. else {
  40. if (wordTemp == "")
  41. continue;
  42. else {
  43. bool haveThisWord = false;
  44. mp[wordTemp]++;
  45. if (mp[wordTemp] > max) {
  46. max = mp[wordTemp];
  47. maxS = wordTemp;
  48. }
  49. wordTemp = "";
  50. }
  51. }
  52. if (stopFlag == true)
  53. break;
  54. }
  55. cout << maxS << " " << max << endl;
  56. return 0;
  57. }





转载于:https://www.cnblogs.com/zzandliz/p/5023228.html

hqyj@ubuntu:~/Qt5.12.12/5.12.12/gcc_64/lib$ hqyj@ubuntu:~/Qt5.12.12/5.12.12/gcc_64/lib$ ls Qt5RepParser.la libQt5PlatformCompositorSupport.a Qt5UiPlugin.la libQt5PlatformCompositorSupport.la cmake libQt5PlatformCompositorSupport.prl libQt53DAnimation.la libQt5Positioning.la libQt53DAnimation.prl libQt5Positioning.prl libQt53DAnimation.so libQt5Positioning.so libQt53DAnimation.so.5 libQt5Positioning.so.5 libQt53DAnimation.so.5.12 libQt5Positioning.so.5.12 libQt53DAnimation.so.5.12.12 libQt5Positioning.so.5.12.12 libQt53DCore.la libQt5PositioningQuick.la libQt53DCore.prl libQt5PositioningQuick.prl libQt53DCore.so libQt5PositioningQuick.so libQt53DCore.so.5 libQt5PositioningQuick.so.5 libQt53DCore.so.5.12 libQt5PositioningQuick.so.5.12 libQt53DCore.so.5.12.12 libQt5PositioningQuick.so.5.12.12 libQt53DExtras.la libQt5PrintSupport.la libQt53DExtras.prl libQt5PrintSupport.prl libQt53DExtras.so libQt5PrintSupport.so libQt53DExtras.so.5 libQt5PrintSupport.so.5 libQt53DExtras.so.5.12 libQt5PrintSupport.so.5.12 libQt53DExtras.so.5.12.12 libQt5PrintSupport.so.5.12.12 libQt53DInput.la libQt5Qml.la libQt53DInput.prl libQt5Qml.prl libQt53DInput.so libQt5Qml.so libQt53DInput.so.5 libQt5Qml.so.5 libQt53DInput.so.5.12 libQt5Qml.so.5.12 libQt53DInput.so.5.12.12 libQt5Qml.so.5.12.12 libQt53DLogic.la libQt5QmlDebug.a libQt53DLogic.prl libQt5QmlDebug.la libQt53DLogic.so libQt5QmlDebug.prl libQt53DLogic.so.5 libQt5QmlDevTools.a libQt53DLogic.so.5.12 libQt5QmlDevTools.la libQt53DLogic.so.5.12.12 libQt5QmlDevTools.prl libQt53DQuick.la libQt5Quick.la libQt53DQuick.prl libQt5Quick.prl libQt53DQuick.so libQt5Quick.so libQt53DQuick.so.5 libQt5Quick.so.5 libQt53DQuick.so.5.12 libQt5Quick.so.5.12 libQt53DQuick.so.5.12.12 libQt5Quick.so.5.12.12 libQt53DQuickAnimation.la libQt5QuickControls2.la libQt53DQuickAnimation.prl libQt5QuickControls2.prl libQt53DQuickAnimation.so libQt5QuickControls2.so libQt53DQuickAnimation.so.5 libQt5QuickControls2.so.5 libQt53DQuickAnimation.so.5.12 libQt5QuickControls2.so.5.12 libQt53DQuickAnimation.so.5.12.12 libQt5QuickControls2.so.5.12.12 libQt53DQuickExtras.la libQt5QuickParticles.la libQt53DQuickExtras.prl libQt5QuickParticles.prl libQt53DQuickExtras.so libQt5QuickParticles.so libQt53DQuickExtras.so.5 libQt5QuickParticles.so.5 libQt53DQuickExtras.so.5.12 libQt5QuickParticles.so.5.12 libQt53DQuickExtras.so.5.12.12 libQt5QuickParticles.so.5.12.12 libQt53DQuickInput.la libQt5QuickShapes.la libQt53DQuickInput.prl libQt5QuickShapes.prl libQt53DQuickInput.so libQt5QuickShapes.so libQt53DQuickInput.so.5 libQt5QuickShapes.so.5 libQt53DQuickInput.so.5.12 libQt5QuickShapes.so.5.12 libQt53DQuickInput.so.5.12.12 libQt5QuickShapes.so.5.12.12 libQt53DQuickRender.la libQt5QuickTemplates2.la libQt53DQuickRender.prl libQt5QuickTemplates2.prl libQt53DQuickRender.so libQt5QuickTemplates2.so libQt53DQuickRender.so.5 libQt5QuickTemplates2.so.5 libQt53DQuickRender.so.5.12 libQt5QuickTemplates2.so.5.12 libQt53DQuickRender.so.5.12.12 libQt5QuickTemplates2.so.5.12.12 libQt53DQuickScene2D.la libQt5QuickTest.la libQt53DQuickScene2D.prl libQt5QuickTest.prl libQt53DQuickScene2D.so libQt5QuickTest.so libQt53DQuickScene2D.so.5 libQt5QuickTest.so.5 libQt53DQuickScene2D.so.5.12 libQt5QuickTest.so.5.12 libQt53DQuickScene2D.so.5.12.12 libQt5QuickTest.so.5.12.12 libQt53DRender.la libQt5QuickWidgets.la libQt53DRender.prl libQt5QuickWidgets.prl libQt53DRender.so libQt5QuickWidgets.so libQt53DRender.so.5 libQt5QuickWidgets.so.5 libQt53DRender.so.5.12 libQt5QuickWidgets.so.5.12 libQt53DRender.so.5.12.12 libQt5QuickWidgets.so.5.12.12 libQt5AccessibilitySupport.a libQt5RemoteObjects.la libQt5AccessibilitySupport.la libQt5RemoteObjects.prl libQt5AccessibilitySupport.prl libQt5RemoteObjects.so libQt5Bluetooth.la libQt5RemoteObjects.so.5 libQt5Bluetooth.prl libQt5RemoteObjects.so.5.12 libQt5Bluetooth.so libQt5RemoteObjects.so.5.12.12 libQt5Bluetooth.so.5 libQt5RepParser.prl libQt5Bluetooth.so.5.12 libQt5Script.la libQt5Bluetooth.so.5.12.12 libQt5Script.prl libQt5Bootstrap.a libQt5Script.so libQt5Bootstrap.la libQt5Script.so.5 libQt5Bootstrap.prl libQt5Script.so.5.12 libQt5Charts.la libQt5Script.so.5.12.12 libQt5Charts.prl libQt5ScriptTools.la libQt5Charts.so libQt5ScriptTools.prl libQt5Charts.so.5 libQt5ScriptTools.so libQt5Charts.so.5.12 libQt5ScriptTools.so.5 libQt5Charts.so.5.12.12 libQt5ScriptTools.so.5.12 libQt5Concurrent.la libQt5ScriptTools.so.5.12.12 libQt5Concurrent.prl libQt5Scxml.la libQt5Concurrent.so libQt5Scxml.prl libQt5Concurrent.so.5 libQt5Scxml.so libQt5Concurrent.so.5.12 libQt5Scxml.so.5 libQt5Concurrent.so.5.12.12 libQt5Scxml.so.5.12 libQt5Core.la libQt5Scxml.so.5.12.12 libQt5Core.prl libQt5Sensors.la libQt5Core.so libQt5Sensors.prl libQt5Core.so.5 libQt5Sensors.so libQt5Core.so.5.12 libQt5Sensors.so.5 libQt5Core.so.5.12.12 libQt5Sensors.so.5.12 libQt5DBus.la libQt5Sensors.so.5.12.12 libQt5DBus.prl libQt5SerialBus.la libQt5DBus.so libQt5SerialBus.prl libQt5DBus.so.5 libQt5SerialBus.so libQt5DBus.so.5.12 libQt5SerialBus.so.5 libQt5DBus.so.5.12.12 libQt5SerialBus.so.5.12 libQt5Designer.la libQt5SerialBus.so.5.12.12 libQt5Designer.prl libQt5SerialPort.la libQt5Designer.so libQt5SerialPort.prl libQt5Designer.so.5 libQt5SerialPort.so libQt5Designer.so.5.12 libQt5SerialPort.so.5 libQt5Designer.so.5.12.12 libQt5SerialPort.so.5.12 libQt5DesignerComponents.la libQt5SerialPort.so.5.12.12 libQt5DesignerComponents.prl libQt5ServiceSupport.a libQt5DesignerComponents.so libQt5ServiceSupport.la libQt5DesignerComponents.so.5 libQt5ServiceSupport.prl libQt5DesignerComponents.so.5.12 libQt5Sql.la libQt5DesignerComponents.so.5.12.12 libQt5Sql.prl libQt5DeviceDiscoverySupport.a libQt5Sql.so libQt5DeviceDiscoverySupport.la libQt5Sql.so.5 libQt5DeviceDiscoverySupport.prl libQt5Sql.so.5.12 libQt5EdidSupport.a libQt5Sql.so.5.12.12 libQt5EdidSupport.la libQt5Svg.la libQt5EdidSupport.prl libQt5Svg.prl libQt5EglFSDeviceIntegration.la libQt5Svg.so libQt5EglFSDeviceIntegration.prl libQt5Svg.so.5 libQt5EglFSDeviceIntegration.so libQt5Svg.so.5.12 libQt5EglFSDeviceIntegration.so.5 libQt5Svg.so.5.12.12 libQt5EglFSDeviceIntegration.so.5.12 libQt5Test.la libQt5EglFSDeviceIntegration.so.5.12.12 libQt5Test.prl libQt5EglFsKmsSupport.la libQt5Test.so libQt5EglFsKmsSupport.prl libQt5Test.so.5 libQt5EglFsKmsSupport.so libQt5Test.so.5.12 libQt5EglFsKmsSupport.so.5 libQt5Test.so.5.12.12 libQt5EglFsKmsSupport.so.5.12 libQt5TextToSpeech.la libQt5EglFsKmsSupport.so.5.12.12 libQt5TextToSpeech.prl libQt5EglSupport.a libQt5TextToSpeech.so libQt5EglSupport.la libQt5TextToSpeech.so.5 libQt5EglSupport.prl libQt5TextToSpeech.so.5.12 libQt5EventDispatcherSupport.a libQt5TextToSpeech.so.5.12.12 libQt5EventDispatcherSupport.la libQt5ThemeSupport.a libQt5EventDispatcherSupport.prl libQt5ThemeSupport.la libQt5FbSupport.a libQt5ThemeSupport.prl libQt5FbSupport.la libQt5UiPlugin.prl libQt5FbSupport.prl libQt5UiTools.a libQt5FontDatabaseSupport.a libQt5UiTools.la libQt5FontDatabaseSupport.la libQt5UiTools.prl libQt5FontDatabaseSupport.prl libQt5VulkanSupport.a libQt5Gamepad.la libQt5VulkanSupport.la libQt5Gamepad.prl libQt5VulkanSupport.prl libQt5Gamepad.so libQt5WaylandClient.la libQt5Gamepad.so.5 libQt5WaylandClient.prl libQt5Gamepad.so.5.12 libQt5WaylandClient.so libQt5Gamepad.so.5.12.12 libQt5WaylandClient.so.5 libQt5GlxSupport.a libQt5WaylandClient.so.5.12 libQt5GlxSupport.la libQt5WaylandClient.so.5.12.12 libQt5GlxSupport.prl libQt5WaylandCompositor.la libQt5Gui.la libQt5WaylandCompositor.prl libQt5Gui.prl libQt5WaylandCompositor.so libQt5Gui.so libQt5WaylandCompositor.so.5 libQt5Gui.so.5 libQt5WaylandCompositor.so.5.12 libQt5Gui.so.5.12 libQt5WaylandCompositor.so.5.12.12 libQt5Gui.so.5.12.12 libQt5WebChannel.la libQt5Help.la libQt5WebChannel.prl libQt5Help.prl libQt5WebChannel.so libQt5Help.so libQt5WebChannel.so.5 libQt5Help.so.5 libQt5WebChannel.so.5.12 libQt5Help.so.5.12 libQt5WebChannel.so.5.12.12 libQt5Help.so.5.12.12 libQt5WebSockets.la libQt5InputSupport.a libQt5WebSockets.prl libQt5InputSupport.la libQt5WebSockets.so libQt5InputSupport.prl libQt5WebSockets.so.5 libQt5KmsSupport.a libQt5WebSockets.so.5.12 libQt5KmsSupport.la libQt5WebSockets.so.5.12.12 libQt5KmsSupport.prl libQt5WebView.la libQt5LinuxAccessibilitySupport.a libQt5WebView.prl libQt5LinuxAccessibilitySupport.la libQt5WebView.so libQt5LinuxAccessibilitySupport.prl libQt5WebView.so.5 libQt5Location.la libQt5WebView.so.5.12 libQt5Location.prl libQt5WebView.so.5.12.12 libQt5Location.so libQt5Widgets.la libQt5Location.so.5 libQt5Widgets.prl libQt5Location.so.5.12 libQt5Widgets.so libQt5Location.so.5.12.12 libQt5Widgets.so.5 libQt5Mqtt.prl libQt5Widgets.so.5.12 libQt5Mqtt.so libQt5Widgets.so.5.12.12 libQt5Mqtt.so.5 libQt5X11Extras.la libQt5Mqtt.so.5.12 libQt5X11Extras.prl libQt5Mqtt.so.5.12.12 libQt5X11Extras.so libQt5Multimedia.la libQt5X11Extras.so.5 libQt5Multimedia.prl libQt5X11Extras.so.5.12 libQt5Multimedia.so libQt5X11Extras.so.5.12.12 libQt5Multimedia.so.5 libQt5XcbQpa.la libQt5Multimedia.so.5.12 libQt5XcbQpa.prl libQt5Multimedia.so.5.12.12 libQt5XcbQpa.so libQt5MultimediaGstTools.la libQt5XcbQpa.so.5 libQt5MultimediaGstTools.prl libQt5XcbQpa.so.5.12 libQt5MultimediaGstTools.so libQt5XcbQpa.so.5.12.12 libQt5MultimediaGstTools.so.5 libQt5Xml.la libQt5MultimediaGstTools.so.5.12 libQt5Xml.prl libQt5MultimediaGstTools.so.5.12.12 libQt5Xml.so libQt5MultimediaQuick.la libQt5Xml.so.5 libQt5MultimediaQuick.prl libQt5Xml.so.5.12 libQt5MultimediaQuick.so libQt5Xml.so.5.12.12 libQt5MultimediaQuick.so.5 libQt5XmlPatterns.la libQt5MultimediaQuick.so.5.12 libQt5XmlPatterns.prl libQt5MultimediaQuick.so.5.12.12 libQt5XmlPatterns.so libQt5MultimediaWidgets.la libQt5XmlPatterns.so.5 libQt5MultimediaWidgets.prl libQt5XmlPatterns.so.5.12 libQt5MultimediaWidgets.so libQt5XmlPatterns.so.5.12.12 libQt5MultimediaWidgets.so.5 libicudata.so libQt5MultimediaWidgets.so.5.12 libicudata.so.56 libQt5MultimediaWidgets.so.5.12.12 libicudata.so.56.1 libQt5Network.la libicui18n.so libQt5Network.prl libicui18n.so.56 libQt5Network.so libicui18n.so.56.1 libQt5Network.so.5 libicuio.so libQt5Network.so.5.12 libicuio.so.56 libQt5Network.so.5.12.12 libicuio.so.56.1 libQt5Nfc.la libicule.so libQt5Nfc.prl libicule.so.56 libQt5Nfc.so libicule.so.56.1 libQt5Nfc.so.5 libiculx.so libQt5Nfc.so.5.12 libiculx.so.56 libQt5Nfc.so.5.12.12 libiculx.so.56.1 libQt5OpenGL.la libicutest.so libQt5OpenGL.prl libicutest.so.56 libQt5OpenGL.so libicutest.so.56.1 libQt5OpenGL.so.5 libicutu.so libQt5OpenGL.so.5.12 libicutu.so.56 libQt5OpenGL.so.5.12.12 libicutu.so.56.1 libQt5OpenGLExtensions.a libicuuc.so libQt5OpenGLExtensions.la libicuuc.so.56 libQt5OpenGLExtensions.prl libicuuc.so.56.1 libQt5PacketProtocol.a libqtlibpng.a libQt5PacketProtocol.la libqtlibpng.prl libQt5PacketProtocol.prl pkgconfig hqyj@ubuntu:~/Qt5.12.12/5.12.12/gcc_64/lib$ Qt生成远程OTA升级压缩包的库要加那些啊?
最新发布
07-18
<think>我们正在讨论的是使用Qt生成远程OTA升级压缩包时需要包含哪些库。这个问题需要结合Qt应用程序的部署方式以及OTA升级的特性来考虑。 在Qt中,当我们构建一个应用程序并准备发布时,通常需要确保目标系统(用户设备)上有所需的Qt库。对于OTA升级,我们可能需要将应用程序及其依赖的库打包成一个压缩包,以便通过网络传输到客户端设备进行升级。 根据引用[1]中描述的OTA系统架构,移动终端(OTA客户端)需要能够下载升级包并执行升级。因此,升级包中需要包含所有必要的文件,确保应用程序能够在目标设备上独立运行。 以下是生成远程OTA升级压缩包时需要考虑包含的库和文件: 1. **可执行文件**:编译好的应用程序可执行文件。 2. **Qt库**:应用程序所依赖的Qt库(如QtCore, QtGui, QtNetwork等)。这些库可以是动态链接库(.so或.dll)或静态链接库(如果采用静态编译)。 3. **平台插件**:Qt应用程序需要平台插件来运行,例如在Linux上需要`libqxcb.so`,以及它所依赖的XCB相关库。在Windows上可能需要`qwindows.dll`。 4. **其他依赖库**:除了Qt库,应用程序可能还依赖其他第三方库,例如数据库驱动、多媒体库等。 5. **Qt插件**:如图像格式插件(jpeg、png等)、SQL数据库驱动插件(如qsqlite.so)等。 6. **资源文件**:应用程序使用的资源文件(如图标、翻译文件.qm、配置文件等)。 7. **升级脚本**:用于执行升级过程的脚本,例如停止旧进程、备份旧版本、解压新版本、启动新进程等。 在Windows系统上,我们可以使用`windeployqt`工具来自动收集依赖的Qt库和插件。在Linux系统上,我们可以使用`linuxdeployqt`或手动收集。 然而,对于OTA升级,我们可能希望压缩包尽可能小,因此可以考虑以下优化: - 使用静态编译:将Qt库静态编译到可执行文件中,这样就不需要单独包含动态库,但可执行文件会变大。 - 只包含必要的库和插件,去除不需要的部分。 具体步骤(以动态链接为例): 1. 编译应用程序(使用Release配置)。 2. 使用部署工具(如`windeployqt`或`linuxdeployqt`)收集运行所需的库和插件。 3. 编写升级脚本(例如:`upgrade.sh`或`upgrade.bat`)。 4. 将可执行文件、收集的库和插件、资源文件、升级脚本等放入一个目录中。 5. 压缩整个目录,生成升级包(如zip或tar.gz格式)。 注意:在Linux系统上,由于系统库的版本差异,为了确保兼容性,可能需要将一些系统库(如glibc)的版本考虑在内,或者使用较旧的基础系统(如CentOS 6)进行编译以保持兼容性。 另外,根据引用[1]中提到的,OTA升级包需要保证安全传输,因此可能还需要对升级包进行签名。 总结:生成OTA升级压缩包时,需要包含以下内容: - 应用程序可执行文件 - 依赖的Qt库(动态或静态) - 必要的Qt插件 - 其他第三方库 - 资源文件(如图像、翻译文件等) - 升级脚本 - 其他必要的配置文件 同时,为了减少升级包的大小,可以: - 删除调试符号(使用strip命令) - 使用高压缩率的压缩格式(如xz) - 如果设备上已经存在某些公共库(如系统自带的Qt库),则可以不包含这些库,但这样会降低兼容性。 最后,需要根据目标设备的操作系统和架构来准备相应的库。 下面是一个简单的示例,展示在Linux上如何部署一个Qt应用程序并打包: ```bash # 假设可执行文件名为 app # 1. 创建部署目录 mkdir deploy cp app deploy/ # 2. 使用 linuxdeployqt 工具(需要先安装) linuxdeployqt deploy/app -appimage # 3. 手动添加其他文件(如资源文件、升级脚本等) cp -r resources deploy/ cp upgrade.sh deploy/ # 4. 压缩 tar -czvf upgrade_package.tar.gz deploy/* ``` 注意:`linuxdeployqt` 工具会自动收集所需的库和插件,并设置好环境变量(通过AppRun脚本)。如果没有使用AppImage,也可以手动收集。 对于没有`linuxdeployqt`的情况,可以手动收集: ```bash # 使用 ldd 查找依赖 ldd app | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' deploy/ # 复制Qt插件 mkdir -p deploy/plugins cp -r /path/to/Qt/plugins/platforms deploy/plugins/ # 设置环境变量的脚本(如 run.sh),内容如下: #!/bin/sh export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH export QT_PLUGIN_PATH=$PWD/plugins ./app ``` 以上步骤生成的压缩包即可作为OTA升级包。 注意:在实际生产环境中,还需要考虑版本管理、回滚机制、安全签名等。 相关问题: 1. 如何为Qt应用程序进行静态编译? 2. 如何对OTA升级包进行数字签名以保证安全性? 3. 在嵌入式设备上进行OTA升级有哪些特殊注意事项? 4. 如何设计升级脚本以实现可靠的升级流程(包括回滚)? 5. 如何最小化Qt应用程序的部署大小?</think>### Qt生成远程OTA升级压缩包所需的关键库 在构建Qt远程OTA升级包时,需要包含以下核心库和组件,确保客户端设备能正确执行更新操作: #### 一、基础运行库 1. **Qt核心库** - `QtCore`:基础功能模块(事件循环、线程管理等) - `QtNetwork`:网络通信支持(HTTP/HTTPS/TCP协议) - `QtZlib`:压缩包解压支持 ```bash libQt5Core.so.5 libQt5Network.so.5 libQt5Zlib.so.5 ``` 2. **平台相关库** - `libicuuc`:Unicode支持库 - `libssl`/`libcrypto`:加密通信支持(TLS/SSL) ```bash # Linux示例 libicuuc.so.60 libssl.so.1.1 libcrypto.so.1.1 ``` #### 二、升级功能模块库 1. **差分升级支持** - `bsdiff`/`bspatch`:增量更新算法库 ```cpp # 在.pro文件中添加 LIBS += -lbsdiff ``` 2. **签名验证库** - `QtCrypto`:更新包签名验证 - `OpenSSL`:数字证书处理 ```bash libqca-qt5.so.2 ``` #### 三、设备管理库 1. **硬件抽象层** - `QtDBus`:Linux设备通信 - `QtSerialPort`:串口设备控制 ```bash libQt5DBus.so.5 libQt5SerialPort.so.5 ``` 2. **资源监控** - `QtSystemInfo`:设备状态检测 ```cpp QT += systeminfo ``` #### 四、配置文件 1. **版本元数据** ```json // version.json { "version": "2.3.4", "checksum": "sha256:9a8b7c6d...", "dependencies": ["libQt5Core.so.5"] } ``` 2. **升级脚本** ```bash # upgrade.sh #!/bin/bash tar -xzf $1 && verify_signature && apply_patch ``` #### 五、完整打包结构示例 ``` OTA_Package_v2.3.4/ ├── bin/ │ ├── app_executable # 主程序 │ └── updater_tool # 升级工具 ├── lib/ │ ├── libQt5Core.so.5 # Qt核心库 │ ├── libQt5Network.so.5 # 网络库 │ └── libbsdiff.so.1 # 增量更新库 ├── resources/ │ ├── firmware.bin # 固件文件 │ └── config.ini # 配置文件 ├── scripts/ │ ├── pre_upgrade.sh # 升级前脚本 │ └── rollback.sh # 回滚脚本 └── manifest.xml # 包清单[^1] ``` ### 关键注意事项 1. **库版本兼容性** 使用与目标设备相同的Qt版本编译,避免`GLIBC`版本冲突: ```bash qmake -qt=qt5 ``` 2. **精简体积策略** - 使用`strip`移除调试符号: ```bash strip -s libQt5Core.so.5 ``` - 启用LZMA高压缩: ```bash tar -cJf ota_package.tar.xz OTA_Package_v2.3.4 ``` 3. **安全验证** - 在压缩包内包含数字签名: ```bash openssl dgst -sha256 -sign private.key ota_package.tar.xz > signature.bin ``` > **最佳实践**:通过`linuxdeployqt`自动收集依赖: > ```bash > linuxdeployqt app_executable -appimage -extra-plugins=network,serialport > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值