gcc版本
gcc版本
確保目標系統(運行環境)的 GCC 版本 高于或等于開發環境的版本,否則程序無法在目標平臺運行。通過
gcc -v
可查看當前版本。
cmake生成可執行文件
強烈建議在cmakelists添加設置運行時 rpath 為 $ORIGIN/…/lib(相對路徑),否則可能在其他設備上運行時會報錯,筆者親身經歷
# 設置運行時 rpath 為 $ORIGIN/../lib(相對路徑)
set_target_properties(${PROJECT_NAME} PROPERTIESINSTALL_RPATH "$ORIGIN/../lib"BUILD_WITH_INSTALL_RPATH TRUE
)set_target_properties(${PROJECT_NAME}c PROPERTIESINSTALL_RPATH "$ORIGIN/../lib"BUILD_WITH_INSTALL_RPATH TRUE
)
附上報錯截圖
筆者這里以sunny450_silc
可執行文件為例,編譯在工程路徑下的build目錄中,不會編譯請自行搜索
構建打包目錄
- 目錄結構
package/
├── bin/
│ ├── run.sh # 啟動腳本
│ └── app # 程序的可執行文件
├── lib/
│ ├── libQt5Core.so.5 # 依賴庫 (例如 Qt 庫)
│ ├── libQt5Gui.so.5 # 依賴庫
│ ├── libQt5Widgets.so.5
│ ├── libstdc++.so.6 # 其他依賴庫
│ └── ... # 其他庫
├── plugins/ # Qt 插件目錄
│ ├── platforms/
│ │ └── libqxcb.so # 平臺插件 (用于 GUI 應用的 X11 支持)
│ └── ... # 其他可能的插件
└── resources/ # 資源文件(可選)└── icon.png # 圖標或其他資源文件
- 建議放到工程路徑下
mkdir -p package/{bin,lib,plugins}
- 復制可執行程序到bin目錄下
cp build/sunny450_silc package/bin/
準備程序運行庫
查看所需運行庫
ldd package/bin/sunny450_silc
可以根據各個庫后面的路徑來找對應的庫,并將它們全部復制到之前創建的bin目錄下,或者使用腳本復制依賴庫,筆者這里用腳本.
新建復制腳本
vim cplib.sh
寫入內容
#!/bin/bash
ldd ./sunny450_silc | awk '/=> \// {print $3}' | while IFS= read -r lib; doif [ -L "$lib" ]; thencp "$(readlink -f "$lib")" ../lib/elsecp "$lib" ../lib/fi
done
添加可執行權限
chmod +x package/bin/cplib.sh
執行
./cplib.sh
復制qt插件
查看qt路徑
which qmake
復制
編寫運行腳本
cd bin
vim run.sh
#!/bin/bash
export LD_LIBRARY_PATH=$(dirname $0)/../lib:$LD_LIBRARY_PATH
$(dirname $0)/sunny450_silc
添加可執行權限
chmod +x run.sh
運行
壓縮
tar czvf sunny450_silc.tar.gz package/