已合并
Fix ASC sim shared library link paths #4029
jianwei10创建于 7月6日
Fix ASC sim shared library link paths #4029
已合并
jianwei10创建于 7月6日
jianwei10
jianwei10成员
7月6日

描述

修复在编动态库场景下,仿真库链接失效的情况

关联的Issue

测试

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 jianwei10 的贡献)
jianwei10jianwei10成员
7月6日 创建了 pull request,commit 2d03466f
CANN-robotCANN-robot成员
7月6日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月6日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
** ✅ 诸葛洵, chenyiyuan, gcw_kUomxQ2l (3/2) ✅ gcw_kUomxQ2l (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

Geminiver, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
7月6日 将zengjuan,zhanghao_0689,wulinyu,kong0808,dengjing_aoe,YeZZzzz1,bluesky901,yangbinhua,zhudi22,chenyiyuan,xun_zhuge,bianque,houyuyang,shi_nanxiang,wuyang_hw,jiangxinyu3,munanhw,ai_xin,ascendhjh,DragonBornHD84,hyolee,gcw_kUomxQ2l,Andy-lb设为评审人
CANN-robotCANN-robot成员
7月6日 将munanhw,ai_xin,gcw_kUomxQ2l,Andy-lb设为审查人
jianwei10jianwei10成员
7月6日 修改了pull request 的描述
jianwei10jianwei10成员
7月6日 修改了pull request 的描述
jianwei10
jianwei10成员
7月6日 评论:

compile

likedislike
jianwei10jianwei10成员
7月6日 预合并成功(commit_id: d7ce2aeecf21887f7ba21d57b32a56996fbdfdf2)
CANN-robotCANN-robot成员
7月6日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月6日 评论:

流水线任务触发成功
任务链接 [c9ea3bd894734676ad0441e6fda21986][流水线指导]

任务名称状态日志下载链接
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck ✅ SUCCESS >>>>>
codecheck_Pr ✅ SUCCESS
pre_comment ✅ SUCCESS >>>>>
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_codestyle ✅ SUCCESS >>>>>
codecheck_precommit ✅ SUCCESS >>>>> >>>>>

[2026-07-06 11:48:02]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月6日 评论:

流水线任务触发成功
任务链接 [5fef400fbbdf4f5f8154285f594e5df7][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
UT_Test_adv_test_one ✅ SUCCESS
UT_Test_adv_test_two ✅ SUCCESS
UT_Test_basic_test_two ✅ SUCCESS
UT_Test_basic_test_three ✅ SUCCESS
UT_Test_basic_test_four ✅ SUCCESS
UT_Test_basic_test_five ✅ SUCCESS
UT_Test_arm ✅ SUCCESS
UT_Test_report ✅ SUCCESS >>>>>

[2026-07-06 11:55:04]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月6日 评论:

流水线任务触发成功
任务链接 [d1d41dda29194aff916777a788f6a3ef][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
pre_comment ✅ SUCCESS >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>

[2026-07-06 11:47:22]    CI执行结束

likedislike
gao_dafa成员
7月6日 评论:

Geminiver,感谢您的提交,建议在完成PR充分自验证后,再触发线上构建任务。

若您的PR已具备检视条件,可根据下表的责任田,@对应的committer进行代码检视,我们会在第一时间对您的提交进行处理。

代码责任田:

module committer
adv_api chenyiyuan, wuyang_hw
basic_api chenyiyuan, wuyang_hw
c_api pangfd, yue_mo_du_qian
cmake xun_zhuge, DragonBornHD84
docs munanhw, ai_xin
examples changxianyu, bianque
simt_api wulinyu, zhanghao_0689
scripts xun_zhuge, kevin365
tools YANXI_ZHAO, XuebinYang, sjtulxh

💡 如您不确定可以@谁,可以直接@我或者ascend-c sig的maintainer,xun_zhuge和ascendhjh,我们会为您分配合适的committer进行代码检视。

再次感谢您参与CANN的社区贡献。

likedislike
chenyiyuan成员
7月6日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
7月6日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月6日 添加了label:ci-pipeline-passed
zhugexun_sjtu
zhugexun_sjtu成员
7月6日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
7月6日 添加了label:lgtm
atomgit-bot
atomgit-bot
7月6日 评论:

变更摘要

此 PR 修复了 ASC 模拟器模式下共享库链接路径未正确生效的问题。在 CMake 中,原先通过 CMAKE_ASC_LINK_FLAGS 变量追加 -Wl,-rpath、-Wl,-L 等链接器标志,再单独调用 link_libraries 链接 runtime_camodel 和 npu_drv_camodel 库。该方式可能导致链接标志无法正确传递给链接器。本次改动将这些链接器标志直接移入 link_libraries() 调用中,确保模拟器路径与依赖库同时被正确链接。

主要改动

  • 将链接器标志从 CMAKE_ASC_LINK_FLAGS 移至 link_libraries:原先使用 string(APPEND CMAKE_ASC_LINK_FLAGS ...) 追加 -Wl,-rpath、-Wl,-L、-Wl,--disable-new-dtags 等标志,现改为直接将这些标志作为 link_libraries() 的参数,与 runtime_camodel、npu_drv_camodel 库一同传递给链接器。
  • 移除对 CMAKE_ASC_LINK_FLAGS 的追加操作:删除了 string(APPEND CMAKE_ASC_LINK_FLAGS ...) 这行,不再依赖全局链接标志变量来设置模拟器库路径。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月6日 评论:

代码审查

经过对 diff 和周围代码的全面审查,我确认此更改是正确的:

变更分析:

  1. 移除的行 (string(APPEND CMAKE_ASC_LINK_FLAGS ...)):将 -Wl,-rpath,...、-Wl,-L...、-Wl,--disable-new-dtags 这些链接器标志从 CMAKE_ASC_LINK_FLAGS 变量中移除。

  2. 新增的行 (扩展 link_libraries()):将上述链接器标志和原有的 runtime_camodel / npu_drv_camodel 库都通过 link_libraries() 传递。

为什么这是正确的:

  • CMAKE_ASC_LINK_FLAGS 仅在 CMAKE_ASC_LINK_EXECUTABLE(可执行文件链接规则,第142行)中被消费。而 CMAKE_ASC_CREATE_SHARED_LIBRARY(共享库链接规则,第147-151行)中没有 <CMAKE_ASC_LINK_FLAGS> 占位符。这意味着旧代码中,这些链接器标志仅对可执行文件生效,对共享库无效。

  • 新代码将标志移至 link_libraries(),其内容会填充到 <LINK_LIBRARIES> 占位符中——该占位符同时存在于可执行文件和共享库的链接规则中。这与 PR 标题 "Fix ASC sim shared library link paths" 完全吻合。

  • 所有被移动的标志均为 -Wl,... 格式的链接器透传标志,在链接命令行中的位置(<OBJECTS> 之前或之后)不影响其功能。

  • 此模式与同一文件中 cpu 模式(第231-260行)已有的做法完全一致,确保了代码风格统一。

  • CMAKE_ASC_LINK_FLAGS 变量在项目其他地方无外部引用(仅在本文件第142行和第228行使用),移除对 sim 模式的追加操作不会影响其他模块。

结论:此文件无问题。


审查总结:

  • 已审查文件:cmake/asc/asc_modules/CMakeASCInformation.cmake — 无问题
  • 发现数量:0
  • 整体风险判断:此变更是安全的修复,将 sim 模式的链接路径标志从仅影响可执行文件扩展为同时影响共享库,与 cpu 模式保持一致,无回归风险。
类型 数量
🔴 阻塞 0
🟡 建议 1

💬 仅评论

likedislike
不准确?
atomgit-bot
atomgit-bot7月6日进行代码检视1
cmake/asc/asc_modules/CMakeASCInformation.cmake
@@ -189,0 +187,4 @@
187+ -Wl,--disable-new-dtags
188+ runtime_camodel
189+ npu_drv_camodel
190+ )
atomgit-bot
atomgit-bot7月6日评论:

🟡 Medium Priority

变更行:删除了原来的第 184 行 string(APPEND CMAKE_ASC_LINK_FLAGS " -Wl,-rpath,${_ASC_SIM_PATH} -Wl,-L${_ASC_SIM_PATH} -Wl,--disable-new-dtags"),并将这些链接器标志移入 link_libraries() 调用(新第 184-190 行)。

受影响行为/契约:

  1. CMAKE_ASC_LINK_FLAGS 变量在 ASC 可执行文件链接规则(第 142 行)中通过 <CMAKE_ASC_LINK_FLAGS> 占位符被引用,位于 <OBJECTS> 之前。旧代码会将 -Wl,-rpath,...、-Wl,-L...、-Wl,--disable-new-dtags 注入到该位置。
  2. 新代码将这些标志全部移到了 link_libraries() 中,它们会出现在链接命令的 <LINK_LIBRARIES> 位置(位于 <OBJECTS> 之后),且作用域变为全局(影响当前目录及子目录下所有后续目标,而非仅限于 ASC 目标)。

失败模式:

  • --disable-new-dtags 在命令行中的位置发生了改变(从 objects 之前变为之后)。对于某些链接器,该选项需要在目标文件之前指定才能生效。

建议:恢复 string(APPEND CMAKE_ASC_LINK_FLAGS ...) 行以保持链接标志在 ASC 链接规则中的正确位置和作用域。至少应将 -Wl,--disable-new-dtags 放回 CMAKE_ASC_LINK_FLAGS(与 cpu 模式一致)。同时评估 -Wl,-rpath,... 和 -Wl,-L... 是否确实需要全局生效;如果不需要,也应移回 CMAKE_ASC_LINK_FLAGS 或改用 target_link_options() 限定作用域。

likedislike
不准确?
liulun0308成员
7月6日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月6日 添加了label:approved
CANN-robotCANN-robot成员
7月6日 解决了最后一个问题
CANN-robotCANN-robot成员
7月6日 合入了pull request