summaryrefslogtreecommitdiff
path: root/mrpt-apps.spec
diff options
context:
space:
mode:
Diffstat (limited to 'mrpt-apps.spec')
-rw-r--r--mrpt-apps.spec34
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 /