Open
修改申威GCC生成库路径为/usr/lib64和/lib64 #240
lc-compilerAdd on  Oct 16, 2025
lc-compiler
Oct 16, 2025 Create

【特性描述】
目前已合入openEuler-24.03-LTS-SP1分支的申威架构补丁会默认将库文件安装在/usr/lib和/lib下,而申威处理器为64位,为提升软件安装的标准性,现将默认安装路径修改为/usr/lib64和/lib64

likedislike
Llc-compiler
Oct 16, 2025 创建了需求
openeuler-ci-bot
openeuler-ci-botCollaborators
Oct 16, 2025 Comments:

Hi little-huaduo, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Compiler, and any of the maintainers: @li-yancheng , @stubCode , @alexanderbill , @chenzheng1030 , @jvmboy , @eastb233 , @kuenking111_admin , @cf-zhao , any of the committers: @xiongzhou4 , @lin-4682 , @huang-xiaoquan

likedislike
openeuler-ci-botopeneuler-ci-botCollaborators
Oct 16, 2025 添加了   sig/Compiler 标签
huang-xiaoquanCollaborators
Aug 8 Comments:

结论:这条需求已经交付并合入,原始诉求可以认为已满足;不过还有几条分支需要前向移植,说明如下。

已合入:补丁 0018-Sw64-Port-Change-libdir-from-lib-to-lib64.patch 经 PR #682 于 2025-10-17 合入 openEuler-24.03-LTS-SP1(changelog 12.3.1-65),PR #691 于 2025-12-01 合入 openEuler-24.03-LTS-SP3(12.3.1-104,文件改名为 1018- 前缀),openEuler-24.03-LTS-SP4 与 openEuler-24.03-LTS-Next 也已带上。补丁改动三处:gcc/config/sw_64/linux-elf.h 的 GLIBC_DYNAMIC_LINKER 由 /lib/ld-linux.so.2 改为 /lib64/ld-linux-sw-64.so.2;gcc/config/sw_64/sw_64.h 新增 STANDARD_STARTFILE_PREFIX_1 "/lib64/" 与 STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/";gcc/config/sw_64/t-linux 删掉整行 MULTIARCH_DIRNAME,换成 MULTILIB_DIRNAMES = 64 与 MULTILIB_OSDIRNAMES = .=../lib64$(call if_multiarch,:sw_64-linux-gnu)。

剩余缺口:master、openEuler-25.09、openEuler-26.09、openEuler-24.03-LTS-SP2 这四条分支还没有该补丁(spec 里 sw64 补丁号最大只到 Patch1017)。而 src-openeuler/glibc 的配套补丁 0024-Sw64-Change-libdir-from-lib-to-lib64.patch 已经在 SP1/SP2/SP3/SP4/master/openEuler-26.09 上声明,且 glibc 用 %autosetup -p1 全量应用、不受 %ifarch 限制。也就是说在 openEuler-24.03-LTS-SP2、master、openEuler-26.09 上,glibc 已经把动态链接器挪到 /lib64/ld-linux-sw-64.so.2,gcc 却仍往二进制里写 INTERP=/lib/ld-linux.so.2 —— 这已经是既有的失配,所以在这几条分支上补齐 gcc 侧补丁属于修复动作,建议按较高优先级安排。openEuler-25.09 是唯一 glibc 侧也未声明该补丁的分支,在 gcc 侧提交之前请先确认 glibc 是否也补,再决定两边的提交顺序,避免造成反向失配。

前向移植改法沿用现有补丁即可:加入补丁文件,在 gcc.spec 的 %ifarch sw_64 块内 Patch1017 之后补 Patch1018 声明与 %patch -P1018 -p1,gcc_release 加 1 并写 changelog。评审时请专门看 t-linux 那处 —— 原来的 MULTIARCH_DIRNAME 是整行删除,multiarch 名字改由 MULTILIB_OSDIRNAMES 的后缀承载,两者语义并不等价(前者还会影响 multiarch include/lib 搜索路径的生成),需要确认目标分支上的搜索路径行为符合预期。

需要说明的是,上面关于失配的判断来自 spec 与补丁源码层的比对:我们这边没有 sw_64 机器,openEuler 也不发布公开的 sw_64 软件仓,端到端验证还需要申威侧给出结论 —— 出包后确认库落在 /usr/lib64,gcc -dumpspecs | grep dynamic-linker 显示 /lib64/ld-linux-sw-64.so.2,新编二进制用 readelf -l 看 INTERP 段并实际运行通过。

另外想请确认:openEuler-22.03-LTS-SP4 上的 sw64 使能 PR #547 自 2025-01-22 起一直是 open 状态,是否还要继续推进,若推进是否也一并带上本次的 libdir 改动。原始诉求既已满足,如无其他问题,建议关闭本单,前向移植另开单跟踪。

likedislike