diff options
Diffstat (limited to 'mrpt-apps.spec')
| -rw-r--r-- | mrpt-apps.spec | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/mrpt-apps.spec b/mrpt-apps.spec index e963f88..13e9596 100644 --- a/mrpt-apps.spec +++ b/mrpt-apps.spec @@ -8,7 +8,7 @@ Name: ros-%{ros_distro}-%{RosPkgName} Version: 2.15.20 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Mobile Robot Programming Toolkit (MRPT) applications License: BSD URL: https://github.com/MRPT/mrpt_ros.git @@ -322,12 +322,25 @@ fi # 不出产物;并保留下游 hardening 项。 # (2) 限并行:按"每个 cc1plus 预留 2.5GiB"从 MemTotal 反推 job 数,取 # min(nproc, 内存上限)、至少 1 路。 +# (3) 显式补 -fPIC:本包内层 MRPT_BUILD_APPLICATIONS=ON 编的是 apps/ 下的 +# 可执行程序(不是共享库),CMake 不会自动加 -fPIC;而下面覆盖 rpm 的 +# build_cflags/build_cxxflags 宏时,把其中 generic-hardened-cc1 specs +# 带来的 -fPIE 默认值一并丢掉了。于是编译侧产出非 PIC 目标文件,链接侧 +# LDFLAGS 并未被覆盖、仍带 generic-hardened-ld 的 -pie,aarch64 上链接 +# 必然失败(build 112611 实测,apps 下全部目标都在链接期倒下): +# relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol +# `__stack_chk_guard@@GLIBC_2.17' ... can not be used when making a +# shared object; recompile with -fPIC +# → bin/mrpt-yaml2ini、bin/DifOdometry-Datasets ... Error 1 +# 兄弟库包(libmath/libgui/libobs/...)同样覆盖过 CFLAGS 却未炸,是因为 +# 它们编的是共享库、CMake 自动带 -fPIC,只有本包编可执行程序才暴露。 +# 补 -fPIC 后编译侧对 -pie 链接与 -shared 链接两种情形都成立。 # ★ 本段注释里禁止出现百分号前缀的宏指令字样:rpm 的 scriptlet 解析器会把 # 注释行里的这类文本当宏定义提取,定义之后同一行的残留文本会被丢出来当 # 命令执行(同链 mrpt-libmath 的 build 112584 实踩:line 105: command not # found → Bad exit status,而编译本身已 100% 通过)。 -export CFLAGS="-O1 -g0 -fstack-protector-strong -Wp,-D_FORTIFY_SOURCE=2 -fasynchronous-unwind-tables" -export CXXFLAGS="-O1 -g0 -fstack-protector-strong -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fasynchronous-unwind-tables" +export CFLAGS="-O1 -g0 -fPIC -fstack-protector-strong -Wp,-D_FORTIFY_SOURCE=2 -fasynchronous-unwind-tables" +export CXXFLAGS="-O1 -g0 -fPIC -fstack-protector-strong -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fasynchronous-unwind-tables" JOBS="$(nproc 2>/dev/null || echo 1)" MEM_KB="$(awk '/^MemTotal:/{print $2; exit}' /proc/meminfo 2>/dev/null)" case "$MEM_KB" in @@ -376,6 +389,21 @@ make install DESTDIR=%{buildroot} /opt/ros/%{ros_distro} %changelog +* Tue Sep 22 2026 ai-importer <ai-importer@openeuler.org> - 2.15.20-3 +- 修复 build 112611 的构建阶段(build 段)链接失败(aarch64): + * 症状:apps 下全部可执行程序在链接期倒下, + "relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol + `__stack_chk_guard@@GLIBC_2.17' ... can not be used when making a shared + object; recompile with -fPIC"(首例 bin/mrpt-yaml2ini,随后 + bin/DifOdometry-Datasets;make 在 apps 目录即中止)。 + * 根因:本包内层 MRPT_BUILD_APPLICATIONS=ON 编的是可执行程序而非共享库, + CMake 不会自动加 -fPIC;而上一版为降内存覆盖 rpm 的 build_cflags/ + build_cxxflags 宏时,连其中 generic-hardened-cc1 specs 提供的 -fPIE + 默认值一并丢掉了 → 编译侧非 PIC,链接侧 LDFLAGS 未被覆盖、仍带 + generic-hardened-ld 的 -pie,二者不匹配必炸。兄弟库包同样覆盖过 CFLAGS + 却未炸,是因为它们编共享库、CMake 自带 -fPIC,本包是唯一编可执行程序的。 + * 修法:CFLAGS/CXXFLAGS 各补 -fPIC(编译侧对 -pie 与 -shared 链接两种情形 + 都成立),降内存的 -O1 -g0 与 hardening 项保持不变。 * Tue Sep 22 2026 ai-importer <ai-importer@openeuler.org> - 2.15.20-2 - 依赖可用性预检无 provider 修复(触发面 prepare_failed/kind=deps,缺失清单 libfreenect-devel / libglfw3-dev / libopenni2-dev / libxxf86vm / wx-common / |
