已合并
Fix ASC sim shared library link paths #4029
jianwei10创建于 7月6日
Fix ASC sim shared library link paths #4029
已合并
共 1 个文件变更+7-2
| @@ -181,8 +181,13 @@ if(CMAKE_ASC_RUN_MODE STREQUAL "sim") | |||
| 181 | math(EXPR _val_index "${_index} + 1") | 181 | math(EXPR _val_index "${_index} + 1") |
| 182 | list(GET _ARCH_TO_DIR_MAP ${_val_index} _ASC_INTERNAL_DIR) | 182 | list(GET _ARCH_TO_DIR_MAP ${_val_index} _ASC_INTERNAL_DIR) |
| 183 | set(_ASC_SIM_PATH "$ENV{ASCEND_HOME_PATH}/tools/simulator/${_ASC_INTERNAL_DIR}/lib") | 183 | set(_ASC_SIM_PATH "$ENV{ASCEND_HOME_PATH}/tools/simulator/${_ASC_INTERNAL_DIR}/lib") |
| 184 | - string(APPEND CMAKE_ASC_LINK_FLAGS " -Wl,-rpath,${_ASC_SIM_PATH} -Wl,-L${_ASC_SIM_PATH} -Wl,--disable-new-dtags") | 184 | + link_libraries( |
| 185 | - link_libraries(runtime_camodel npu_drv_camodel) | 185 | + -Wl,-rpath,${_ASC_SIM_PATH} |
| 186 | + -Wl,-L${_ASC_SIM_PATH} | ||
| 187 | + -Wl,--disable-new-dtags | ||
| 188 | + runtime_camodel | ||
| 189 | + npu_drv_camodel | ||
| 190 | + ) | ||
| 186 | message(STATUS "ASC Simulator enabled: ${_ASC_SIM_PATH}") | 191 | message(STATUS "ASC Simulator enabled: ${_ASC_SIM_PATH}") |
| 187 | else() | 192 | else() |
| 188 | message(FATAL_ERROR "Unsupported ASC architecture for simulator: ${CMAKE_ASC_ARCHITECTURES}") | 193 | message(FATAL_ERROR "Unsupported ASC architecture for simulator: ${CMAKE_ASC_ARCHITECTURES}") |
🟡 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 行)。受影响行为/契约:
CMAKE_ASC_LINK_FLAGS变量在 ASC 可执行文件链接规则(第 142 行)中通过<CMAKE_ASC_LINK_FLAGS>占位符被引用,位于<OBJECTS>之前。旧代码会将-Wl,-rpath,...、-Wl,-L...、-Wl,--disable-new-dtags注入到该位置。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()限定作用域。