From 12047f50f1eab3efb438bae0cf56e2ca90599092 Mon Sep 17 00:00:00 2001 From: Tian jianyong <11429339@qq.com> Date: Fri, 9 May 2025 17:18:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9build=5Fexecute=5Fpackage.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 7 +++- scripts/build_execute_package.sh | 61 +++++++++++++++++++++++++++----- 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 26aa2e3..09c3fdd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,11 +125,16 @@ target_include_directories(${PROJECT_NAME}_lib target_link_libraries(${PROJECT_NAME}_lib PUBLIC Boost::system + Boost::filesystem Boost::thread + Boost::chrono + Boost::date_time + Boost::atomic + Boost::regex nlohmann_json::nlohmann_json CURL::libcurl Threads::Threads - -pthread # 添加显式 pthread 链接选项 + -pthread ) # 创建主可执行文件 diff --git a/scripts/build_execute_package.sh b/scripts/build_execute_package.sh index 10645c1..ec5b7ef 100644 --- a/scripts/build_execute_package.sh +++ b/scripts/build_execute_package.sh @@ -27,6 +27,7 @@ log_info "Building version: ${VERSION}" TEMP_DIR="${PROJECT_ROOT}/temp_build" rm -rf "${TEMP_DIR}" mkdir -p "${TEMP_DIR}/bin" +mkdir -p "${TEMP_DIR}/lib" # Build the project log_info "Building project..." @@ -55,6 +56,45 @@ cp "bin/${PROJECT_NAME}" "${TEMP_DIR}/bin/" || { exit 1 } +# --- BEGIN: Copy Libraries --- +log_info "Copying required runtime libraries to ${TEMP_DIR}/lib/ ..." + +GCC_RUNTIME_LIB_PATH="/usr/local/lib64" +if [ -f "${GCC_RUNTIME_LIB_PATH}/libstdc++.so.6" ]; then + cp -Lv "${GCC_RUNTIME_LIB_PATH}/libstdc++.so.6" "${TEMP_DIR}/lib/" + log_info "Copied libstdc++.so.6 (and its target file)" +else + log_warn "libstdc++.so.6 not found in ${GCC_RUNTIME_LIB_PATH}" +fi + +if [ -f "${GCC_RUNTIME_LIB_PATH}/libgcc_s.so.1" ]; then + cp -Lv "${GCC_RUNTIME_LIB_PATH}/libgcc_s.so.1" "${TEMP_DIR}/lib/" + log_info "Copied libgcc_s.so.1 (and its target file)" +else + log_warn "libgcc_s.so.1 not found in ${GCC_RUNTIME_LIB_PATH}" +fi + +BOOST_LIB_PATH="/usr/lib64/boost169" +BOOST_LIBS=( + "libboost_system.so.1.69.0" + "libboost_filesystem.so.1.69.0" + "libboost_thread.so.1.69.0" + "libboost_chrono.so.1.69.0" + "libboost_date_time.so.1.69.0" + "libboost_atomic.so.1.69.0" + "libboost_regex.so.1.69.0" +) + +for boost_lib in "${BOOST_LIBS[@]}"; do + if [ -f "${BOOST_LIB_PATH}/${boost_lib}" ]; then + cp -Lv "${BOOST_LIB_PATH}/${boost_lib}" "${TEMP_DIR}/lib/" + log_info "Copied ${boost_lib}" + else + log_warn "${boost_lib} not found in ${BOOST_LIB_PATH}" + fi +done +# --- END: Copy Libraries --- + # Generate version file echo "${VERSION}" > "${TEMP_DIR}/bin/version.txt" @@ -65,7 +105,7 @@ sha256sum "${PROJECT_NAME}" > "${PROJECT_NAME}.sha256" # Create deployment archive cd "${TEMP_DIR}" PACKAGE_NAME="${PROJECT_NAME}_${VERSION}.tar.gz" -tar czf "${PROJECT_ROOT}/${PACKAGE_NAME}" bin/ +tar czf "${PROJECT_ROOT}/${PACKAGE_NAME}" bin/ lib/ # Cleanup cd "${PROJECT_ROOT}" @@ -73,18 +113,23 @@ rm -rf "${TEMP_DIR}" log_info "Package created: ${PACKAGE_NAME}" log_info "Package contents:" -log_info " - Executable binary" -log_info " - Version file" -log_info " - Checksum file" +log_info " - Executable binary (in bin/)" +log_info " - Runtime libraries (in lib/)" +log_info " - Version file (in bin/)" +log_info " - Checksum file (in bin/)" # Print instructions echo log_info "To deploy:" echo "1. Copy ${PACKAGE_NAME} to production environment" echo "2. Extract: tar xzf ${PACKAGE_NAME}" -echo "3. Verify checksum: sha256sum -c ${PROJECT_NAME}.sha256" +echo " This will create 'bin/' and 'lib/' directories." +echo "3. Verify checksum: cd bin && sha256sum -c ${PROJECT_NAME}.sha256 && cd .." echo "4. Stop service: systemctl stop collision-avoidance" -echo "5. Backup old binary" +echo "5. Backup old binary and libraries (optional but recommended)" +echo " e.g., mv /opt/collision_avoidance/bin/${PROJECT_NAME} /opt/collision_avoidance/bin/${PROJECT_NAME}.bak" +echo " e.g., rsync -ab /opt/collision_avoidance/lib/ /opt/collision_avoidance/lib_bak/" echo "6. Copy new binary: cp bin/${PROJECT_NAME} /opt/collision_avoidance/bin/" -echo "7. Start service: systemctl start collision-avoidance" -echo "8. Check status: systemctl status collision-avoidance" \ No newline at end of file +echo "7. Copy new libraries: cp lib/* /opt/collision_avoidance/lib/" +echo "8. Start service: systemctl start collision-avoidance" +echo "9. Check status: systemctl status collision-avoidance" \ No newline at end of file