Skip to content

fix: 用可移植的 dlopen 方案替换内部 _dl_sym 符号,修复 GLIBC_PRIVATE 错误#175

Open
weapons97 wants to merge 1 commit intoProject-HAMi:mainfrom
weapons97:fix-issue174
Open

fix: 用可移植的 dlopen 方案替换内部 _dl_sym 符号,修复 GLIBC_PRIVATE 错误#175
weapons97 wants to merge 1 commit intoProject-HAMi:mainfrom
weapons97:fix-issue174

Conversation

@weapons97
Copy link
Copy Markdown
Contributor

概述

本 PR 修复了在容器环境中运行 HAMi-core 时出现的 undefined symbol: _dl_sym, version GLIBC_PRIVATE 运行时错误。

问题

代码之前使用了 _dl_sym ,这是 glibc 的内部符号(GLIBC_PRIVATE 版本标签)。该符号不属于公共 API,并非在所有 glibc 版本中都可用,导致库在容器环境中无法加载。

错误信息:

./Service/ symbol lookup error: /usr/
local/vgpu/libvgpu.so: undefined symbol: 
_dl_sym, version GLIBC_PRIVATE

解决方案

将所有 _dl_sym 的使用替换为使用 dlopen("libc.so.6") + dlsym() 的可移植方案:

// 修改前
real_dlsym = _dl_sym(RTLD_NEXT, "dlsym", 
dlsym);

// 修改后
void *libc_handle = dlopen("libc.so.6", 
RTLD_LAZY);
if (libc_handle) {
    real_dlsym = dlsym(libc_handle, 
    "dlsym");
}

修改内容

文件 修改内容 src/libvgpu.c 替换 dlsym() 和 preInit() 函数中的 _dl_sym src/nvml/hook.c 替换 load_nvml_libraries() 函数中的 _dl_sym src/include/libvgpu.h 移除 extern void* _dl_sym(...) 声明

影响

  • ✅ 修复不同 glibc 版本间的兼容性问题
  • ✅ 解决容器环境中的运行时崩溃
  • ✅ 仅使用公共 POSIX API,不依赖内部符号
  • ✅ 对现有功能无破坏性变更

相关问题

修复: undefined symbol: _dl_sym, version GLIBC_PRIVATE 运行时错误

@hami-robot
Copy link
Copy Markdown
Contributor

hami-robot Bot commented Apr 21, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: weapons97
Once this PR has been reviewed and has the lgtm label, please assign archlitchi for approval. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@hami-robot hami-robot Bot added the size/S label Apr 21, 2026
将 _dl_sym(GLIBC_PRIVATE 符号)替换为 dlopen("libc.so.6") + dlsym(),
修复在 glibc 版本不兼容的容器环境中出现的
"undefined symbol: _dl_sym, version GLIBC_PRIVATE" 运行时错误。

涉及文件:
- src/libvgpu.c
- src/nvml/hook.c
- src/include/libvgpu.h

Signed-off-by: weipeng <weip3@chinatelecom.cn>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant