From 8cf81f605595e2980882fc5f9d11aacab9b1f19e Mon Sep 17 00:00:00 2001 From: liumangmang Date: Fri, 6 Mar 2026 17:32:31 +0800 Subject: [PATCH] =?UTF-8?q?docs(project-summary):=20=E6=96=B0=E5=A2=9E=20T?= =?UTF-8?q?CPClientTester=20=E6=89=93=E5=8C=85=E4=B8=8E=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=80=BB=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tcpclienttester-打包与启动工作总结.md | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 src/work/project-summary/tcpclienttester-打包与启动工作总结.md diff --git a/src/work/project-summary/tcpclienttester-打包与启动工作总结.md b/src/work/project-summary/tcpclienttester-打包与启动工作总结.md new file mode 100644 index 0000000..68feafd --- /dev/null +++ b/src/work/project-summary/tcpclienttester-打包与启动工作总结.md @@ -0,0 +1,185 @@ +--- +icon: mdi:lan-connect +date: 2026-03-06 +category: + - 工作 + - 项目总结 +tag: + - TCPClientTester + - 打包部署 + - Linux +title: TCPClientTester 打包与启动工作总结 +--- + +TCPClientTester 打包与启动工作总结 + + +# TCPClientTester 打包与启动工作总结 + +> 本文整理了 TCPClientTester 在目标机器 `10.6.221.8` 的编译、打包、部署、启动验证及问题修复过程,用于后续复用与交接。 + +--- + +## 1. 背景与目标 + +- 目标:在 `10.6.221.8` 上完成 TCPClientTester 的可独立运行打包。 +- 输出:桌面工具目录 `/home/sunri/Desktop/tool`,包含可执行程序、配置资源、依赖库和启动脚本。 +- 结果:通过 `DISPLAY=:0` 启动验证,程序可正常拉起。 + +--- + +## 2. 编译前准备 + +### 2.1 同步依赖目录 + +从参考机 `10.6.220.186` 同步 `08_Preview` 到目标机: + +```bash +ssh 10.6.220.186 'tar czf - -C /home/sunri 08_Preview' | ssh 10.6.221.8 'tar xzf - -C /home/sunri' +``` + +### 2.2 环境变量 + +```bash +export PRJHOME=/home/sunri/IdeaProjects/V2.00 +export CYGHOME=/home/sunri/08_Preview/linx80 +``` + +--- + +## 3. 编译流程 + +```bash +cd /home/sunri/IdeaProjects/V2.00/src_cxx/99_TestTool/TCPClientTester +PRJHOME="$PRJHOME" CYGHOME="$CYGHOME" qmake TCPClientTester.pro +PRJHOME="$PRJHOME" CYGHOME="$CYGHOME" make -j4 +``` + +编译产物: + +- `/home/sunri/IdeaProjects/V2.00/binary/linx80/bin/tcptester` + +--- + +## 4. 打包目录规范 + +目标目录:`/home/sunri/Desktop/tool` + +建议结构: + +- `tool/bin/tcptester` +- `tool/lib/`(运行依赖库) +- `tool/config/`(配置与资源) +- `tool/run_tcptester.sh`(统一启动脚本) + +--- + +## 5. 文件拷贝与依赖收集 + +### 5.1 程序与配置资源 + +```bash +TOOL=/home/sunri/Desktop/tool +SRC=/home/sunri/IdeaProjects/V2.00/src_cxx/99_TestTool/TCPClientTester +BIN=/home/sunri/IdeaProjects/V2.00/binary/linx80/bin/tcptester + +rm -rf "$TOOL" +mkdir -p "$TOOL/bin" "$TOOL/lib" "$TOOL/config" + +cp -f "$BIN" "$TOOL/bin/" +cp -f "$SRC/basic.xml" "$TOOL/config/" +cp -f "$SRC/TCPClientTester_zh_CN.qm" "$TOOL/config/" + +for d in mainStationFile model res uploadFile lib "边缘节点一键测试" "巡视设备一键测试" "主站一键测试"; do + [ -d "$SRC/$d" ] && cp -a "$SRC/$d" "$TOOL/config/" +done +``` + +### 5.2 依赖库自动拷贝 + +```bash +ldd "$BIN" | awk '/=> \/home\/sunri\// {print $3}' | sort -u | while read -r so; do + cp -f "$so" "$TOOL/lib/" +done +``` + +--- + +## 6. 启动脚本与验证 + +### 6.1 启动脚本 + +```bash +cat > /home/sunri/Desktop/tool/run_tcptester.sh <<'EOF' +#!/usr/bin/env bash +set -e +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +export LD_LIBRARY_PATH="$SCRIPT_DIR/lib:${LD_LIBRARY_PATH:-}" +export TCPCLIENTTESTER_LANG="${TCPCLIENTTESTER_LANG:-zh_CN}" +cd "$SCRIPT_DIR/config" +exec "$SCRIPT_DIR/bin/tcptester" "$@" +EOF + +chmod +x /home/sunri/Desktop/tool/run_tcptester.sh +``` + +### 6.2 启动验证 + +```bash +env DISPLAY=:0 /home/sunri/Desktop/tool/run_tcptester.sh +``` + +持续运行验证(返回 `124` 表示进程在运行): + +```bash +timeout 8s env DISPLAY=:0 /home/sunri/Desktop/tool/run_tcptester.sh +echo $? +``` + +--- + +## 7. 问题定位与修复 + +### 7.1 问题现象 + +- 程序启动时在 `CBasecfgManger::getLanguage()` 处触发段错误(`SIGSEGV`)。 + +### 7.2 修复方案 + +- 修改 `main.cpp`,避免调用崩溃路径。 +- 改为从环境变量读取语言:`TCPCLIENTTESTER_LANG`。 +- 默认值设置为 `zh_CN`,保障无环境变量时可正常启动。 + +修复文件: + +- `/home/sunri/IdeaProjects/V2.00/src_cxx/99_TestTool/TCPClientTester/main.cpp` + +--- + +## 8. 常用命令速查 + +中文启动: + +```bash +/home/sunri/Desktop/tool/run_tcptester.sh +``` + +英文启动: + +```bash +TCPCLIENTTESTER_LANG=en_US /home/sunri/Desktop/tool/run_tcptester.sh +``` + +检查缺失依赖: + +```bash +ldd /home/sunri/Desktop/tool/bin/tcptester | grep "not found" +``` + +--- + +## 9. 交付结论 + +- 已完成从编译到独立目录打包的全流程。 +- 启动脚本已固化依赖路径与语言参数,便于现场快速使用。 +- 崩溃问题已通过入口语言加载逻辑调整规避,当前版本可稳定启动。